Cmake用于外部项目的通配符

Cmake用于外部项目的通配符,cmake,Cmake,我想通过ProjectSettings.cmake文件将一些设置传递给外部项目。我知道我可以为此使用CMAKE\u项目\u INCLUDE(通过CMAKE\u ARGS传递到ExternalProject\u add()) 但我必须对我的主项目构建的许多外部项目执行此操作,我不想重复它-我为CMAKE_ARGS定义了一个通用变量,该变量当前传递给ExternalProject\u Add()的每个调用,我只想附加到该变量 此CMAKE\u PROJECT\u INCLUDE的PROJECT-NA

我想通过ProjectSettings.cmake文件将一些设置传递给外部项目。我知道我可以为此使用
CMAKE\u项目\u INCLUDE
(通过
CMAKE\u ARGS
传递到
ExternalProject\u add()

但我必须对我的主项目构建的许多外部项目执行此操作,我不想重复它-我为
CMAKE_ARGS
定义了一个通用变量,该变量当前传递给
ExternalProject\u Add()
的每个调用,我只想附加到该变量

CMAKE\u PROJECT\u INCLUDE的
PROJECT-NAME
字段是否有通配符机制


或者有没有一种方法可以让我想要构建的所有外部项目的CMakeLists.txt包含我的ProjectSettings.cmake?请注意,我无法更改所有代码,因此需要从父项目中对它们进行操作。

集中包装重复出现的代码是and的主要目的之一

在你的例子中,这看起来像这样:

宏(我的外部项目名称)
外部项目添加(
${u name}
CMAKE_ARGS-DCMAKE_项目${{u name}\u包括:FILEPATH=ProjectSettings.CMAKE
${ARGN}
)
endmacro()
ARGN
将添加
\u name
之后给出的所有参数。因此,只需将
macro()
放在根
CMakeLists.txt
文件中,并将所有
ExternalProject\u Add()
调用替换为
My\u ExternalProject\u Add()

或者,您可以使用
CMAKE_ARGS-C ProjectSettings.CMAKE
预加载外部项目的设置(这样您就不需要项目名称)

参考资料


@GaneshSathyanarayanan很乐意提供帮助,欢迎来到Stack Overflow。如果这个答案——或任何其他答案——解决了您的问题,请将其标记为已接受。如果包装是cmake的核心目的,那么cmake将支持更好的引用论点。每个人都会开发自己的小语言,然后甚至不能将参数列表转发给参数可能为空的子调用。。。