作为这个问题的后续行动: Add Source in a subdirectory to a cmake project
最好的方法(可能使用FILE指令?)选择 all 子目录中的.cpp和.h文件,并将它们添加到父目录中定义的SOURCE变量中? / p>
回答上述问题的例子:
set(SOURCE
${SOURCE}
${CMAKE_CURRENT_SOURCE_DIR}/file1.cpp
${CMAKE_CURRENT_SOURCE_DIR}/file2.cpp
PARENT_SCOPE
)
set(HEADERS
${HEADERS}
${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp
${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp
PARENT_SCOPE
)
是否可以做这样的事情?
FILE(GLOB SUB_SOURCES *.cpp)
set(SOURCE
${SOURCE}
${CMAKE_CURRENT_SOURCE_DIR}/${SUB_SOURCES}
PARENT_SCOPE
)
最好的方法(使用CMake)将目录和子目录中的所有源编译成单个输出文件(不是多个库?)
答案 0 :(得分:9)
我认为你要找的是aux_source_directory
命令。
aux_source_directory查找目录中的所有源文件。
aux_source_directory()
收集指定目录中所有源文件的名称 并将列表存储在提供的中。这个命令是 旨在供使用显式模板的项目使用 实例。模板实例化文件可以存储在 "模板"子目录并使用此自动收集 命令以避免手动列出所有实例化。
使用此命令避免编写源列表很有诱惑力 库或可执行目标的文件。虽然这似乎有效, CMake没有办法生成一个知道何时a的构建系统 新的源文件已添加。通常是生成的构建系统 知道何时需要重新运行CMake,因为CMakeLists.txt文件是 修改为添加新源。当源只是添加到 目录无需修改此文件,必须手动完成 重新运行CMake以生成包含新文件的构建系统。
子目录中的CMakeLists.txt可能如下所示:
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SUB_SOURCES)
set(SOURCE
${SOURCE}
${SUB_SOURCES}
PARENT_SCOPE
)
但是,正如您从文档中看到的那样,建议的做法是在CMakeLists.txt中单独列出文件,因为对CMakeLists.txt文件的更改会触发运行cmake。
我希望这很有帮助,而且非常重要。