外部项目的Cmake通配符

时间:2018-04-03 13:14:51

标签: cmake

我想通过ProjectSettings.cmake文件将一些设置传递给外部项目。我知道我可以将CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE用于此目的(通过CMAKE_ARGS传递给ExternalProject_add())。

但是我必须为我的主要项目构建的许多外部项目执行此操作,并且不想继续重复它 - 我为CMAKE_ARGS定义了一个通用变量,该变量目前被传递给{{1我希望只是附加到这个。

ExternalProject_Add()的{​​{1}}字段是否有通配符机制?

或者有没有办法让我想要构建的所有外部项目的CMakeLists.txt都包含我的ProjectSettings.cmake?请注意,我无权更改所有这些内容 - 因此需要从父项目中操作它们。

1 个答案:

答案 0 :(得分:0)

集中环绕重复出现的代码是CMake macrosfunctions的主要目的之一。

所以在你的情况下,这看起来像这样:

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预加载外部项目的设置(然后您不会需要项目的名称)。

<强>参考