范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

CMAKE编译时如何自动下载第三方库并解压安装到指定目录

  导语
  在日常开发过程中难免会使用到第三方库或者需要将部分库分离另外存储,如果将库与代码放在一起难免会造成工程庞大,此时就可以采用将库与源码分离的方式,在编译时根据情况来判断是否需要下载。 步骤
  下面来解析下具体操作步骤,以下以 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. "                     "   Please try downloading and extracting yourself. "                    "   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}        )

linux下用户uid和gid有啥意义平时我们登录linux时候,大家都是用户名登录,可是大家可能并不知道用户名其实就是系统中的后台对用户管理具现化体现。而后台对用户名管理就是通过一串数值识别代替。大家可以先这么理解系宋晓互联互通可以提升用户体验,也有助于社会治理为了促进平台之间的互联互通保障消费者权益与助力中小企业发展,北京航空航天大学网络空间安全学院联合北京科技创新中心研究基地复旦大学中国研究院数字一带一路研究中心于1月21日举办平台互还有5天!超100款APP侵害用户权益面临下架本报记者谢若琳留给这些APP整改的时间不多了。2月18日,工信部通报2022年第一批侵害用户权益的APP,共包含107款APP,视频直播软件成为重灾区。工信部表示,依据个人信息保护一千五百元左右什么手机好点?1500元档现在有很多选择,然后小编把这些选择分为两类,供大家参考。性能怪兽类可能有人有疑问了,1500元买什么性能怪兽级别的手机?没错,还真有,这里的性能怪兽是指相对于普通千元机工作流引擎哪家好?分享一款JVS开源框架系列流程引擎含开源地址一项目简介JVS是面向软件开发团队可以快速实现应用的基础开发框架,采用微服务分布式框架,提供丰富的基础功能,集成众多业务引擎,它灵活性强不同品牌的显卡有什么差别?不同品牌的显卡有什么差别?关于这个问题我来说说我的看法吧,到目前为止我应该也有十几年的玩机史了,多多少少对电脑硬件还是有一些了解,对于一台电脑来说最重要的两大件无非就是CPU和显卡关于人力资源数字化转型,企业该怎么做?人力资源管理数字化要回归本源,即组织能力建设。现在的组织能力跟原来定义的组织能力本质区别在哪里?过去我们看企业,主要看它是不是管控型的,因为大多数中国企业的组织结构都比较复杂。所以FindX5系列出道即巅峰?马里亚纳AI算力超A15,还有3A算法加持智能手机发展至今,随着硬件趋向同质化,大多数手机厂商都已进入了瓶颈期。为了提高自己的核心竞争力,自研芯片成为了众多手机厂商的新赛道,国内大厂纷纷宣布了造芯计划。其中近期OPPO就发手机型号的ProSEMax,代表什么意思?1字之差可能就相差千元手机型号里的ProSTSEMax,都代表什么意思?如小米12proiPhone6s华为nova7se。相信很多人都有这样的疑问,其实这是手机厂家为了区分不同段位手机的标记。买手机时2K骁龙8再次降价200,比小米12还便宜了准智能手机的更新换代速度非常快,你看就高通骁龙8Gen1旗舰手机而已目前就已经有多款搭载高通骁龙8Gen1处理器的旗舰手机推出,而且价格上也越来越实惠了。小米在去年12月的时候推出拆解跳蚤市场捡漏来的飞利浦1590与三洋5065收音机比较做工当前科技飞速发展的时代,很多厂家都在不同的时期,生产诸多类似的产品,或者是相同品类竞争的产品,良性竞争的环境下,有可能您购买的使用品牌产品和你实际使用的东西半毛钱关系都没有在跳蚤市
国产厂商集体沉默后,华为上线新版系统,倪光南的话该重视了开天辟地之鸿蒙自2019年鸿蒙生态系统面世以来,关于鸿蒙的话题就一直没有断过,很多人对鸿蒙都抱有很高的期望,还有一些人对鸿蒙也持有怀疑的态度。不少人说鸿蒙生态系统是安卓套牌的系统,新版微信来了!终于更新了实用功能,建议升级使用微信更新8。0。16正式版,这次是安卓和IOS同步升级新版本。本次更新主要集中在功能的更新,看起来都很实用。接下来就给大家盘一盘,微信更新的5个大功能。其中有4个新增的功能在微信的华为Mate50Pro曝光鸿蒙3。0双环五摄,或将支持5G尽管华为受到了芯片限制,但华为依旧没有放弃发布新品手机,由于芯片的限制,华为发布的手机均不支持5G网络,比如华为P50系列Nova9系列等等。而近日网络中爆料出华为Mate50Pr大咖双城计伏羲智库建议成渝地区从数字经济一线城市的溢出效应中分蛋糕来源四川日报川观新闻智库名片伏羲智库是由中国互联网络信息中心(CNNIC)原主任李晓东教授倡议并牵头,联合产业界及学术界知名青年专家共同发起成立的非营利性互联网特色研究机构,旨在推她适合做华为小米OPPO魅族VIVO的哪款机型代言人?建议阅读3分钟手机现在基本上是人手一台,不知道大家喜欢哪个品牌的手机呢?或者您现在用的是哪个品牌的手机呢?今天麒麟艺术馆联合99穿耐克(鞋子性价比真的高)和丝家车栏目,舒芙内腰椎仪补习班停了,家长卷向兴趣班深燃(shenrancaijing)原创作者宛其黎明李秋涵邹帅唐亚华王敏编辑黎明过去一个月,双减(关于进一步减轻义务教育阶段学生作业负担和校外培训负担的意见)正式官宣落地后,整个校没有对比就没有伤害!同样遇到手机质量问题,小米比苹果良心多了由于每个人的需求不同,所以购买手机时看中的地方也是不相同的,但大多数情况下共有以下几点,分别是配置外观品牌和售后服务。说到售后服务,在手机上涉及的就比较多了,这包括了系统更新适配优2021年最佳智能手机评级当今可购买的顶级智能手机智能手机是现代世界的核心,它不仅是通讯的必需品,还是您的娱乐智能家居控制设备和您永远的伴侣。我们不断更新我们最好的智能手机指南,以反映最近的发布并识别价格变化。所有这些顶级旗舰手机宁德时代点赞转发!马斯克确认美版Model3换装磷酸铁锂电池日前,有美国网友在社交媒体上表示,近期收到特斯拉的邮件显示,新款Model3标准续航版的续航里程发生变化,从此前的263英里降低为253英里。马斯克随后证实,新版Model3采用的AI时代的来临,TWS翻译机到底是鸡肋还是必买品?如果说这几年最火的无线蓝牙产品是什么?那一定是真无线蓝牙耳机(TWS蓝牙耳机)。这耳机火到什么程度呢?毫不夸张地说出门在外,随处可见,每个人的耳朵处都戴着耳机。真的是应了那一句话耳小米新概念机曝光5000mAh大电池144Hz屏,还有12GB运存Tech分析狮8月28日消息,众所周知,现在很多旗舰手机都采用了矩阵式后置布局,或者采用浴霸造型设计。而这次曝光的小米新旗舰概念机,则回归了左上角竖形五摄设计。当然,虽然说该机回归