一 背景
1)ExternalProject命令可以很好的'解决'项目中使用'第三方库',提高项目的'可用性'
2)使用 ExternalProject 来管理'第三方'依赖
二 官网参考
三 指令解读
说明: 只'解读'常用的
(1)目录配置
PREFIX:'目录前缀'
DOWNLOAD_DIR:这个比较'重要',建议选个'编译目录同级'的,这样'删掉编译目录'后,就相当于缓存目录了,下次再编译就可以'节约下载'时间 -->only关联'URL下载'
SOURCE_DIR:适用于'非URL'下载方法,将文件'解压'到'该目录'
PREFIX设置'与否'对应'_DIR'的行为
(2)下载
① 第一部分
重点:URL & URL_HASH:包的'下载'与'校验'
思考:多个'URL链接'的时候,这个'URL_HASH'怎么计算的
② 第二部分
重点:'HTTP_USERNAME'、'HTTP_PASSWORD'、'TLS_VERIFY-->整数校验'
思考:如何对'密码'加密
③ 第三部分
+++++++++++++'Git 项目克隆'+++++++++++++
重点:GIT_REPOSITORY & GIT_TAG
备注:建议'加上' GIT_SHALLOW,'减少'克隆项目的'体积'
fatal: unable to access 'https://xxxxx:xxxxxxxxxx.git/': SSL certificate problem: unable to get local issuer certificate
原因:因为'git服务器的SSL证书'未经过'第三方'机构签署
解决'方法':git config --global http.sslVerify false
备注: --system('系统')、--global('用户')、'无参(特定仓库)'
(3)更新补丁步骤
① 第一部分
PATCH_COMMAND 这个可以'修改后的源文件';比如你可以作为'临时 BUG' 的修改方案,毕竟项目的维护者不一定会'及时'改掉
(4)配置
CONFIGURE_COMMAND: 非 'CMake 项目'的配置参数,可以'执行配置命令'
如: ./configure --prefix=${CMAKE_INSTALL_PREFIX}
补充: 另外需要'配置' BUILD_IN_SOURCE true;
② 第二部分
CMAKE_ARGS:CMake 项目的'配置参数',如 -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
SOURCE_SUBDIR: dir -->'相对SOURCE_DIR的路径'
(5)构建
说明: 多数情况'忽略'
(6)安装、测试、输出、目标、其它
备注: 了解有这个功能即可,'基本不用'
INSTALL_COMMAND:多数情况下也可以'略过',执行的'标准 make install' 命令,如果'不是'这个安装命令,可以'修改'
备注:'cmake'的ExternalProject_Add很多情况'不需要'INSTALL_COMMAND
DEPENDS:有'其它依赖'的,可以配置这个选项,它会'理清'这些依赖的'关系',然后'依次编译'
(7)获取项目属性
四 ExternalProject实践
说明:本次'代码仓'用开源的'gitlab'
(1)在使用使用ExternalProject_Add之前需要导入插件
include(ExternalProject)
(2)常见情形
① URL下载
++++++++++'external_Project1是自定义的target'++++++++++
ExternalProject_Add(external_Project1
#1)多个URL,列表的形式-->自动解压缩
#备注:可远程、可本地
URL http://intranet.somecompany.com/artifacts/sauce-2.7.tgz
https://www.somecompany.com/downloads/sauce-2.7.zip
URL_HASH MD5=d41d8cd98f00b204e9800998ecf8427e
#2)自签名不做https证书校验
TLS_VERIFY false
)
② GIT下载
include(ExternalProject)
ExternalProject_Add(wzj
#1)对应仓的地址
GIT_REPOSITORY git@172.25.2.100:root/gitlecture.git
#2)分支、tag、commit_id -->'加上前缀(origin表示默认远程仓库别名)'
GIT_TAG origin/release/1.2.3
#3)不做'git服务器https'证书的校验-->保证自签名ok
GIT_CONFIG http.sslVerify=false
#4)GIT_SHALLOW true -->只能用于'分支'和'tag'-->浅clone,'非整个的历史'-->'体积小'
)
(3)项目讲解
(4)最佳实践