cmake - 如何仅对某些子目录使用cmake GLOB_RECURSE

标签 cmake

我有一个看起来像这样的源代码布局:

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)

这将按预期方式捕获.cppTopDir/File/中的所有Section/文件,而且还捕获.cpp中的所有Test/文件。

如何在不添加ENDF6_SRC目录中的.cpp文件的情况下创建Test变量? 我不要CMakeLists.txtFile/中的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/

相关文章:

cmake - 寻找 'cmake clean' 命令来清除 CMake 输出

variables - CMake 使用 "@"与 "${}"进行变量扩展

CMake 无法识别 C 包含

c++ - CMake Ninja Git 自签名证书颁发机构密码提示

cmake - 是否可以将 CMakeLists.txt 转换为 Unix Makefile?

macos - MacOS 10.13.3 的 CMake 编译器标识未知

cmake - 如何清理 CMake 生成的项目文件?

c++ - 如何使用 CMake 和 C++ 创建可分发的文件?

c++ - CMake动态链接 `.a`中的 `/usr/local/lib`文件

C++ CMake 编译指令与?