CMakeList.txt函数-ExternalProject_Add

ExternalProject_Add
在libbpf-bootstrap的编译过程中,需要依赖libbpf bpftool;那么需要对其两个也要进行编译;在其CMakeList.txt中,存在这样的函数:ExternalProject_Add; 该函数是 CMake 中的一个非常强大的函数,用于在项目构建过程中添加外部项目。它允许你在构建过程中下载、配置、构建和安装外部依赖库,而无需将这些库的源代码包含在你的项目仓库中。这对于处理复杂的多库依赖关系尤其有用,因为它可以自动化整个过程,并且保持项目的干净和模块化。

使用的时候要注意包含头: include(ExternalProject)

ExternalProject_Add 函数参数
基本参数
<name>:这是外部项目的名称,用于在后续的 CMake 脚本中引用这个项目。
可选参数
PREFIX <prefix>:指定外部项目的根目录。默认情况下,这个目录是 ${CMAKE_BINARY_DIR}/src/<name>。
SOURCE_DIR <source_dir>:指定源代码目录。如果使用 URL 参数,这个目录会自动创建。
BINARY_DIR <binary_dir>:指定构建目录。如果不指定,则使用 SOURCE_DIR。
URL <url>:指定外部项目的下载 URL。可以是多个 URL,以分号分隔。
URL_HASH <type>=<hash>:验证下载文件的完整性。<type> 是校验算法类型(如 SHA256, MD5 等),<hash> 是文件的哈希值。
CONFIGURE_COMMAND <command>:配置外部项目时执行的命令。例如,对于 CMake 配置,可以是 cmake ..。
BUILD_COMMAND <command>:构建外部项目时执行的命令。例如,make 或 ninja。
INSTALL_COMMAND <command>:安装外部项目时执行的命令。例如,make install。
UPDATE_COMMAND <command>:更新外部项目时执行的命令。例如,对于 Git 仓库,可以是 git pull。
TEST_COMMAND <command>:测试外部项目时执行的命令。
DEPS <dependencies>:列出外部项目构建前需要完成的依赖项列表。
LOG_DOWNLOAD <on|off>:是否输出下载阶段的日志。
LOG_CONFIGURE <on|off>:是否输出配置阶段的日志。
LOG_BUILD <on|off>:是否输出构建阶段的日志。
LOG_INSTALL <on|off>:是否输出安装阶段的日志。
LOG_TEST <on|off>:是否输出测试阶段的日志。

使用示例:
假设我们要添加 zlib 库作为一个外部项目,我们可以这样写:

include(ExternalProject)
ExternalProject_Add(
    zlib
    URL "https://zlib.net/zlib-1.2.12.tar.gz"
    URL_HASH SHA256=4e7e89c3866e687391829f59369a724e814e260e771310211052f7199b032e8e
    PREFIX ${CMAKE_BINARY_DIR}/zlib
    INSTALL_DIR ${CMAKE_BINARY_DIR}/zlib/install
    CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> <SOURCE_DIR>
    BUILD_COMMAND make
    INSTALL_COMMAND make install
    DEPENDS zlib_source
    LOG_DOWNLOAD ON
    LOG_CONFIGURE ON
    LOG_BUILD ON
    LOG_INSTALL ON
)

add_library(zlib::zlib INTERFACE IMPORTED)
set_property(TARGET zlib::zlib PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR}/zlib/install/include")
set_property(TARGET zlib::zlib PROPERTY INTERFACE_LINK_LIBRARIES "z")

在这个例子中:

我们指定了 zlib 的下载 URL 和 SHA256 校验值。
设置了 zlib 的前缀目录为 ${CMAKE_BINARY_DIR}/zlib。
指定了安装目录为 ${CMAKE_BINARY_DIR}/zlib/install。
配置命令使用 CMake,并指定了安装目录。
构建和安装命令分别为 make 和 make install。
启用了日志记录。
创建了一个 zlib::zlib 的接口库,并设置了相应的头文件搜索路径和链接库。
通过这种方式,ExternalProject_Add 将自动处理 zlib 的下载、配置、构建和安装过程,使得你的项目能够无缝地使用 zlib 库,而不需要用户手动处理这些步骤。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMakeLists.txt文件是用于配置和构建CMake项目的脚本文件。它通常位于项目的根目录下,并且包含了一系列的指令来定义项目的结构、依赖关系和构建规则。在CMakeLists.txt文件中,你可以使用一些特定的变量来引用不同的路径和文件。 其中,CMAKE_CURRENT_SOURCE_DIR变量是用来表示当前处理的CMakeLists.txt文件所在的目录。这个变量可以用于指定相对路径,比如在使用add_subdirectory指令时,可以指定其他目录作为子目录来构建。 另外,CMakeLists.txt文件中的include指令可以用于载入其他的CMakeLists.txt文件和.cmake文件。这个指令可以用来引入模块文件、宏定义、函数等,并且搜索路径是由CMAKE_MODULE_PATH变量指定的。 关于构建规则的定义,可以使用add_executable指令来定义可执行文件的构建规则,并指定源代码文件的路径。例如,add_executable(myapp main.cpp utils.cpp)指定了两个源代码文件main.cpp和utils.cpp,用于构建一个名为myapp的可执行文件。 此外,add_library指令用于定义库文件的构建规则,并指定源代码文件的路径。比如,add_library(mylib mylib.cpp)表示将mylib.cpp作为源代码文件来构建一个名为mylib的库文件。 总结起来,CMakeLists.txt文件是一个重要的脚本文件,用于配置和构建CMake项目。它可以使用CMAKE_CURRENT_SOURCE_DIR变量来表示当前处理的CMakeLists.txt文件所在的目录,使用include指令来载入其他的CMakeLists.txt文件和.cmake文件,并且使用add_executable和add_library指令来定义可执行文件和库文件的构建规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值