CMake GLOB_RECURSE使用介绍

比如一个源代码布局,如下所示:

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)
  • 如何创建我的 ENDF6_SRC 变量,而不从 Test 目录添加.cpp 文件?我不想在 File / 或 Section / 中有一个 CMakeLists.txt 文件.

如果 “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})

顺便说一下,在顶级目录中执行文件 (GLOB_RECURSE …) 可能会在构建文件夹中从源文件构建中 (也就是构建根位于 “TopDir” 内部) 中拾取不需要的 cpp 文件).

你可能感兴趣的:(C++,c++,开发语言)