8

当他们的安装目标搞砸时,引用 ExternalProjects 可能会很痛苦。因此,在为给定项目生成主项目文件之前,可能需要构建和安装一次 ExternalProjects。CMake是否有可能以及如何做到这一点?

4

1 回答 1

11

您可以使用cmakecall execute_processinside 来配置和构建包含 ExternalProject 的 CMake 项目:

其他项目/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_DIR, BINARY_DIR, 。INSTALL_DIR您有两种方法可以实现:

  1. other_project创建CMakeLists.txt,从主项目调用(在命令之前)。configure_fileexecute_process

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


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

于 2016-05-31T19:38:26.760 回答