当他们的安装目标搞砸时,引用 ExternalProjects 可能会很痛苦。因此,在为给定项目生成主项目文件之前,可能需要构建和安装一次 ExternalProjects。CMake是否有可能以及如何做到这一点?
问问题
3054 次
1 回答
11
您可以使用cmake
call execute_process
inside 来配置和构建包含 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
您有两种方法可以实现:
为other_project创建CMakeLists.txt,从主项目调用(在命令之前)。
configure_file
execute_process
将主项目中的变量作为
-D
参数传递给${CMAKE_COMMAND}
.
对顺序的单独 execute_process
调用COMMANDS
很重要。否则,如果将 singleexecute_process
与几个一起使用COMMANDS
,这些命令将只是“管道”(同时执行,但第一个命令的输出被视为第二个命令的输入)。
于 2016-05-31T19:38:26.760 回答