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 库,而不需要用户手动处理这些步骤。