CMake学习笔记05--ExternalProject_Add模块

1、External Project定义

 官方参考文档https://cmake.org/cmake/help/latest/module/ExternalProject.html

ExternalProject_Add()函数创建一个外部工程可以驱动下载、更新/补丁、配置、构建、安装和测试流程的自定义目标;

ExternalProject_Add(<name> [<option>...])

1.1 目录选项

  • SOURCE_DIR <dir>

将被解包或者非URL下载方式的下载文件的存放路径,如果没有指定下载方法。必须指向被解包或者克隆/检查的外部工程的存放路径;

  • BINARY_DIR <dir>

指定构建目录位置,如果BUILD_IN_SOURCE使能的话,则该选项被忽略;

1.2 下载选项

1.3 更新/补丁选项

1.4 配置选项

配置流程运行在下载和更新流程的后面,外部工程默认被当作CMake工程,如果必要的话可以被否决;

  • CONFIGURE_COMMAND <cmd>...

默认的配置命令运行基于主工程选项的CMake命令;

对于非CMake外部工程,该命令必须使用来覆盖其默认行为;

对于不需要配置流程的工程,指定一个空字符串选项作为命令来执行;

1.5 构建选项

当配置流程以CMake为构建系统的外部工程的流程,那构建流程也是,构建流程将基于Makefile的构建简化为无参数运行make指令;

如果必要的话,它也能使用自定义的命令来取代;

  • BUILD_COMMAND <cmd>...

对于不需要配置流程的工程,指定一个空字符串选项作为命令来执行;

1.6 安装选项

  • INSTALL_COMMAND <cmd>...

1.7 测试选项

1.8 输出日志选项

1.9 终端访问选项

1.10 目标选项

  • DEPENDS <targets>...

指定该外部工程所依赖的其他目标;

1.11 其他选项

2、获取工程属性

3、明确流程管理

4、经典案例分享

ExternalProject命令可以很好的解决项目中使用第三方库,提高项目的可用性。

include(ExternalProject)

ExternalProject_Add(xxxxxx
        SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/xxxxxx
        BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/xxxxxx
        CONFIGURE_COMMAND  ${CMAKE_CURRENT_SOURCE_DIR}/xxxxxx.sh xxxxxx
        BUILD_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/xxxxxx.sh xxxxxx
        INSTALL_COMMAND "")

add_custom_target(xxxxxx ALL
    COMMAND echo "xxxxxx"
    DEPENDS x1 x2 x3 x4
)

通过ExternalProject安装gflag-2.2.2

1、创建名为gflag-2.2.2.cmake的文件

在项目中创建名为Cmake的文件夹下创建名为gflag-2.2.2.cmake的文件

include(ExternalProject)

set(GFLAG_ROOT          ${CMAKE_BINARY_DIR}/thirdparty/gflag-2.2.2)
set(GFLAG_LIB_DIR       ${GFLAG_ROOT}/lib)
set(GFLAG_INCLUDE_DIR   ${GFLAG_ROOT}/include)

set(GFLAG_URL           https://github.com/gflags/gflags/archive/v2.2.2.zip)
set(GFLAG_CONFIGURE     cd ${GFLAG_ROOT}/src/gflag-2.2.2 && cmake -D CMAKE_INSTALL_PREFIX=${GFLAG_ROOT} .)
set(GFLAG_MAKE          cd ${GFLAG_ROOT}/src/gflag-2.2.2 && make)
set(GFLAG_INSTALL       cd ${GFLAG_ROOT}/src/gflag-2.2.2 && make install)

ExternalProject_Add(gflag-2.2.2
        URL                   ${GFLAG_URL}
        DOWNLOAD_NAME         gflag-2.2.2.zip
        PREFIX                ${GFLAG_ROOT}
        CONFIGURE_COMMAND     ${GFLAG_CONFIGURE}
        BUILD_COMMAND         ${GFLAG_MAKE}
        INSTALL_COMMAND       ${GFLAG_INSTALL}
)

2、最后是在项目根目录下的CMakeLists.txt中使用include调用这个cmake即可

include(cmake/gflag-2.2.2.cmake)
include(cmake/hwloc-1.11.cmake)
include(cmake/protobuf-2.6.1.cmake)
include(cmake/protobuf-2.6.1-compile.cmake)

5、参考文献

https://blog.csdn.net/xueqiu1141/article/details/84074618

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值