• GreatSQL社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。

导语

在日常开发过程中难免会应用到第三方库或者须要将局部库拆散另外存储,如果将库与代码放在一起难免会造成工程宏大,此时就能够采纳将库与源码拆散的形式,在编译时依据状况来判断是否须要下载。

步骤

上面来解析下具体操作步骤,以下以 oracle oci 库下载为例。

UNSET命令初始化本次编译用到的参数变量

   #初始化oci库压缩包门路参数LOCAL_OCI_LIB_ZIP   UNSET(LOCAL_OCI_LIB_ZIP CACHE)   #初始化oci库解压门路参数LOCAL_OCI_LIB_DIR    UNSET(LOCAL_OCI_LIB_DIR CACHE)    #初始化oci库压缩包下载门路参数LOCAL_OCI_LIB_ZIP_DL_DIR    UNSET(LOCAL_OCI_LIB_ZIP_DL_DIR CACHE)

SET命令设置参数初始门路或名称

   #设置oci库存放文件夹名称   SET(OCI_LIB_NAME "oci_x86_lib")    # 设置oci库压缩包解压文件夹名称    SET(OCI_LIB_UNZIP_DIR_NAME ${OCI_LIB_NAME})    #设置oci库头文件寄存文件夹名称    SET(LOCAL_OCI_INCLUDE_DIR_NAME "oci_include")    #设置oci库压缩包名称    SET(OCI_LIB_ZIP_NAME "oci_lib.tar.gz")    #设置oci库近程下载地址URL    SET(OCI_LIB_DOWNLOAD_URL "http://xxxxxx/oci_lib.tar.gz")    #设置oci库近程下载超时工夫    SET(DOWNLOAD_OCI_LIB_TIMEOUT 600 CACHE STRING "Timeout in seconds when downloading oci_lib.")

FIND_FILE命令在门路下查找对应名称文件或文件夹是否存在,判断库是否曾经下载或解压

    #判断压缩包在文件夹ora_oci_lib下是否曾经存在         FIND_FILE(LOCAL_OCI_LIB_ZIP              NAMES ${OCI_LIB_ZIP_NAME}              PATHS "ora_oci_lib"              NO_DEFAULT_PATH            )       #判断压缩包在文件夹ora_oci_lib下是否曾经解压        FIND_FILE(LOCAL_OCI_LIB_DIR              NAMES ${OCI_LIB_NAME}              PATHS "ora_oci_lib"              NO_DEFAULT_PATH            )       #判断压缩包下载门路       FIND_FILE(LOCAL_OCI_LIB_ZIP_DL_DIR              NAMES ""              PATHS "ora_oci_lib"              NO_DEFAULT_PATH            )

MESSAGE命令输入相应步骤的提示信息

     #输入以后正进行的操作步骤信息     MESSAGE(STATUS "Checking dblink ${OCI_LIB_UNZIP_DIR_NAME} + ${LOCAL_OCI_LIB_ZIP} .....")

判断以后压缩包是否存在,如果不存在则开始依据设定的URL地址进行下载

     #判断压缩包是否曾经存在      IF(NOT LOCAL_OCI_LIB_ZIP)           #不存在则进行下载操作,输入操作提示信息            MESSAGE(STATUS "Downloading ${OCI_LIB_ZIP_NAME} to ${LOCAL_OCI_LIB_ZIP_DL_DIR}")           #从设定URL地址下载相应的压缩包            FILE(DOWNLOAD ${OCI_LIB_DOWNLOAD_URL}            ${LOCAL_OCI_LIB_ZIP_DL_DIR}/${OCI_LIB_ZIP_NAME}            TIMEOUT ${DOWNLOAD_OCI_LIB_TIMEOUT}            STATUS ERR            SHOW_PROGRESS              )       #判断下载是否存在谬误       IF(ERR EQUAL 0)          #如果下载无谬误则设置压缩包名称标记下载胜利           SET(LOCAL_OCI_LIB_ZIP "${LOCAL_OCI_LIB_ZIP_DL_DIR}/${OCI_LIB_ZIP_NAME}")        ELSE()            #下载谬误输入相干的提示信息            MESSAGE(STATUS "Download failed, error: ${ERR}")            MESSAGE(FATAL_ERROR              "You can try downloading ${OCI_LIB_DOWNLOAD_URL} manually"                " using curl/wget or a similar tool"            )           ENDIF()        ENDIF()

依据设定标记判断是否下载胜利,如果下载胜利则对压缩包文件进行初步的校验,无问题则进行解压缩操作

        IF(LOCAL_OCI_LIB_ZIP )            #输入相应的提示信息校验解压门路等             MESSAGE(STATUS "Checking dblink ${OCI_LIB_UNZIP_DIR_NAME} + ${LOCAL_OCI_INCLUDE_DIR_NAME} + ${LOCAL_OTL_INCLUDE_DIR_NAME} ")             IF(NOT EXISTS "${LOCAL_OCI_LIB_ZIP_DL_DIR}/${OCI_LIB_UNZIP_DIR_NAME}" OR NOT EXISTS               "${LOCAL_OCI_LIB_ZIP_DL_DIR}/${LOCAL_OCI_INCLUDE_DIR_NAME}" OR NOT EXISTS       "${LOCAL_OCI_LIB_ZIP_DL_DIR}/${LOCAL_OTL_INCLUDE_DIR_NAME}" )            #输入提示信息筹备进行解压缩            MESSAGE(STATUS "cd ${LOCAL_OCI_LIB_ZIP_DL_DIR}; tar xfz ${LOCAL_OCI_LIB_ZIP}")            #获取已下载的压缩包大小做根本的判断            GET_FILE_SIZE(${LOCAL_OCI_LIB_ZIP} LOCAL_ZIP_SIZE)            #如果压缩包大小为0则输入对应的错误信息            IF(LOCAL_ZIP_SIZE EQUAL 0)                  #移除损坏压缩包,重置相应的参数                FILE(REMOVE ${LOCAL_OCI_LIB_ZIP})                 UNSET(LOCAL_OCI_LIB_ZIP)                UNSET(LOCAL_OCI_LIB_ZIP CACHE)                MESSAGE(FATAL_ERROR  "${OCI_LIB_ZIP_NAME} is zero length. Deleting it.")              ELSE()               #下载文件根本无问题,进入解压门路开始解压压缩包                 EXECUTE_PROCESS(                  COMMAND ${CMAKE_COMMAND} -E tar xfz "${LOCAL_OCI_LIB_ZIP}"                   WORKING_DIRECTORY "${LOCAL_OCI_LIB_ZIP_DL_DIR}"                  RESULT_VARIABLE tar_result                   )               #判断解压是否胜利             IF (tar_result MATCHES 0)                 #解压胜利设置胜利标记参数                  SET(OCI_LIB_FOUND 1 CACHE INTERNAL "")             ELSE()                 #解压失败输入相应谬误提示信息                MESSAGE(STATUS "Failed to extract files.\n"                  "   Please try downloading and extracting yourself.\n"                 "   The url is: ${OCI_LIB_DOWNLOAD_URL}")             ENDIF()        ENDIF()       ENDIF()      ENDIF()        

至此第三方库曾经下载解压实现,后续能够依据本人源码,设置对应的链接门路进行编译

      INCLUDE_DIRECTORIES 命令能够设置援用头文件包含门路     LINK_DIRECTORIES 命令能够设置援用第三方库文件所在门路

编译实现后能够应用INSTALL命令将后续利用运行时须要应用的库,拷贝到指定的装置目录

   CMAKE_INSTALL_PREFIX 为设置的装置门路   OCI_LIB_NAME为库搁置文件夹     # copy  lib      INSTALL(       FILES ${allCopyFiles}  DESTINATION ${CMAKE_INSTALL_PREFIX}/${OCI_LIB_NAME}     )

Enjoy GreatSQL :)

文章举荐:

面向金融级利用的GreatSQL正式开源
https://mp.weixin.qq.com/s/cI...

Changes in GreatSQL 8.0.25 (2021-8-18)
https://mp.weixin.qq.com/s/qc...

MGR及GreatSQL资源汇总
https://mp.weixin.qq.com/s/qX...

GreatSQL MGR FAQ
https://mp.weixin.qq.com/s/J6...

在Linux下源码编译装置GreatSQL/MySQL
https://mp.weixin.qq.com/s/WZ...

# 对于 GreatSQL

GreatSQL是由万里数据库保护的MySQL分支,专一于晋升MGR可靠性及性能,反对InnoDB并行查问个性,是实用于金融级利用的MySQL分支版本。

Gitee:

https://gitee.com/GreatSQL/Gr...

GitHub:

https://github.com/GreatSQL/G...

Bilibili:

https://space.bilibili.com/13...

微信&QQ群:

可搜寻增加GreatSQL社区助手微信好友,发送验证信息“加群”退出GreatSQL/MGR交换微信群

QQ群:533341697

微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 公布!