我想通过ProjectSettings.cmake文件将一些设置传递给外部项目。我知道我可以将CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE
用于此目的(通过CMAKE_ARGS
传递给ExternalProject_add()
)。
但是我必须为我的主要项目构建的许多外部项目执行此操作,并且不想继续重复它 - 我为CMAKE_ARGS
定义了一个通用变量,该变量目前被传递给{{1我希望只是附加到这个。
此ExternalProject_Add()
的{{1}}字段是否有通配符机制?
或者有没有办法让我想要构建的所有外部项目的CMakeLists.txt都包含我的ProjectSettings.cmake?请注意,我无权更改所有这些内容 - 因此需要从父项目中操作它们。
答案 0 :(得分:0)
集中环绕重复出现的代码是CMake macros和functions的主要目的之一。
所以在你的情况下,这看起来像这样:
macro(My_ExternalProject_Add _name)
ExternalProject_Add(
${_name}
CMAKE_ARGS -DCMAKE_PROJECT_${_name}_INCLUDE:FILEPATH=ProjectSettings.cmake
${ARGN}
)
endmacro()
ARGN
将添加_name
之后给出的所有参数。因此,只需将macro()
放入您的根CMakeLists.txt
文件中,并将所有ExternalProject_Add()
次来电替换为My_ExternalProject_Add()
。
或者,您可以使用CMAKE_ARGS -C ProjectSettings.cmake
initial cache command line option预加载外部项目的设置(然后您不会需要项目的名称)。
<强>参考强>