我有一个看起来像这样的源代码布局:
TopDir/
CMakeLists.txt
A.cpp
A.hpp
...
File/
F1.cpp
F1.hpp
...
Section/
S1.cpp
S1.hpp
...
Test/
CMakeLists.txt
TestF1S1.cpp
TestF2S2.cpp
...
我想将所有
.cpp
文件捕获为源文件(ENDF6_SRC
),因此在我的TopDir/CMakeLists.txt
文件中,我有一行如下所示:file(GLOB_RECURSE ENDF6_SRC ${PROJECT_SOURCE_DIR} *.cpp)
这将按预期方式捕获
.cpp
,TopDir/
和File/
中的所有Section/
文件,而且还捕获.cpp
中的所有Test/
文件。如何在不添加
ENDF6_SRC
目录中的.cpp
文件的情况下创建Test
变量? 我不要CMakeLists.txt
或File/
中的Section/
文件。
最佳答案
如果“TopDir /文件”或“TopDir /部分”中没有子目录,则可以执行以下操作:
file(GLOB ENDF6_SRC
${PROJECT_SOURCE_DIR}/*.cpp
${PROJECT_SOURCE_DIR}/File/*.cpp
${PROJECT_SOURCE_DIR}/Section/*.cpp)
如果那里确实有子目录,则需要多个调用:
file(GLOB ENDF6_SRC_TOP
${PROJECT_SOURCE_DIR}/*.cpp)
file(GLOB_RECURSE ENDF6_SRC_NESTED
${PROJECT_SOURCE_DIR}/File/*.cpp
${PROJECT_SOURCE_DIR}/Section/*.cpp)
set(ENDF6_SRC ${ENDF6_SRC_TOP} ${ENDF6_SRC_NESTED})
顺便说一下,在源代码内部构建的情况下(例如,构建根位于“TopDir”内),在顶级目录中执行
file(GLOB_RECURSE ...)
可能也会从构建文件夹中提取不需要的cpp文件。
关于cmake - 如何仅对某些子目录使用cmake GLOB_RECURSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27992346/