如何在配置主要项目时构建 cmake ExternalProject?

How to build cmake ExternalProject while configurating main one?

当安装目标混乱时,引用 ExternalProjects 可能会很痛苦。因此,在为给定项目生成主项目文件之前,可能需要构建和安装一次 ExternalProjects。 CMake 是否可行以及如何实现?

您可以在 execute_process 中使用 cmake 调用来配置和构建 CMake 项目,其中包含 ExternalProject:

other_project/CMakeLists.txt:

project(other_project)
include(ExternalProject)

ExternalProject_Add(<project_name> <options...>)

CMakeLists.txt:

# Configure external project
execute_process(
    COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR}/other_project
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/other_project
)

# Build external project
execute_process(
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/other_project
)

这样的方式other_project会在目录${CMAKE_BINARY_DIR}/other_project中配置构建。如果你不在 ExternalProject_Add 调用中禁用安装,那么它将在构建 other_project.

时执行

通常,您希望 ExternalProject 的一些选项,如 SOURCE_DIRBINARY_DIRINSTALL_DIR,可以从主项目中的变量推导出来。您有两种方法可以实现:

  1. other_projectconfigure_file 创建 CMakeLists.txt,称为来自主项目(在 execute_process 命令之前)。

  2. 将主项目的变量作为 -D 参数传递给 ${CMAKE_COMMAND}


分隔 execute_process 顺序调用 COMMANDS 很重要。否则,如果将单个 execute_process 与多个 COMMANDS 一起使用,这些命令将只是“管道”(同时执行,但第一个命令的输出被视为第二个命令的输入)。