提供的项目如下:
|--main.cpp
|-A--a1.cpp
| |-a2.cpp
|
|-B--b1.cpp
|-b2.cpp
|--CMakeLists.txt
如何将所有*.cpp
(例如main.cpp
,A/a1.cpp
,A/a2.cpp
,B/b1.cpp
,B/b2.cpp
)添加到cmake变量SRC
?我希望我只需要一个CMakeLists.txt
。顺便说一句,如果我需要排除某些.cpp
,该怎么办?
答案 0 :(得分:2)
如Alexander所提到的,您可以使用file(GLOB_RECURSE myVar myRegex)将与myRegex匹配的所有文件作为列表添加到myVar中。为了排除某些内容,您可以使用myRegex,或者可以使用list(FILTER myVar <INCLUDE|EXCLUDE> REGEX <regular_expression>)
但是请注意,在项目中添加另一个.cpp文件不会在重建时自动添加到目标中。您将需要显式重新配置项目以进行更改。从CMake 3.12开始,文件GLOBE和GLOBE_RECURSE还有一个选项CONFIGURE_DEPENDS
,它将为您进行更新。
这是CMake文档中的注释:
注意:我们不建议您使用GLOB来收集源文件列表 从您的源代码树中。如果没有CMakeLists.txt文件,则在更改源时 添加或删除后,生成的生成系统将无法确定何时 要求CMake再生。 CONFIGURE_DEPENDS标志可能不起作用 可靠地在所有发电机上运行,或者如果在 未来无法支持它,使用它的项目将被卡住。甚至 如果CONFIGURE_DEPENDS能够可靠地运行,则仍然需要执行成本 每次重建都要检查。
答案 1 :(得分:1)
这就是您想要的:
file(GLOB_RECURSE SRC *.cpp)
有关更多信息:https://cmake.org/cmake/help/v3.0/command/file.html
要排除在外,您可以编写函数。
注意:,但我不建议使用'glob'。 最好在文件列表中使用“设置”。