我的源代码布局如下所示:
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
变量?我不想要{{1} } {} {}}或CMakeLists.txt
中的文件。
答案 0 :(得分:22)
如果您在“TopDir / File”或“TopDir / Section”中没有子目录,您可以这样做:
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})
顺便说一句,在源代码构建的情况下,在你的顶级目录中执行file(GLOB_RECURSE ...)
也可能会从构建文件夹中获取不需要的cpp文件(即构建根目录在“TopDir”中) “)。
答案 1 :(得分:0)
您还可以通过过滤全局列表来排除测试目录:
file(GLOB_RECURSE ENDF6_SRC ${PROJECT_SOURCE_DIR} *.cpp)
list(FILTER ENDF6_SRC EXCLUDE REGEX "${PROJECT_SOURCE_DIR}/Test/.*" )