CMake——将子目录中的所有源代码添加到CMake项目中
CMake -- Add all sources in subdirectory to cmake project
作为这个问题的后续:在cmake项目的子目录中添加Source
选择子目录中的所有 .cpp和.h文件并将它们添加到父目录中定义的SOURCE变量的最佳方法是什么(可能使用FILE指令?)上面问题的答案示例:
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)编译所有的源目录和子目录到一个单一的输出文件(不是多个库?)
我想你要找的是aux_source_directory
命令。
aux_source_directory查找一个目录下的所有源文件。
aux_source_directory ()
收集指定目录下所有源文件的名称并将列表存储在提供的。这个命令是旨在由使用显式模板的项目使用实例化。模板实例化文件可以存储在"Templates"子目录并使用此自动收集命令,以避免手动列出所有实例化。
使用这个命令是为了避免编写源代码列表库或可执行目标的文件。虽然这似乎有效,没有办法让CMake生成一个构建系统,知道什么时候已添加新的源文件。通常是生成的构建系统知道什么时候需要重新运行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.
我希望这对你有帮助。
相关文章:
- cmake:添加要搜索头文件的目录
- Visual Studio 中的 CMake 项目:如何添加其他包含和库目录?
- 尝试将 boost::stacktrace 添加到 CMake 项目时出现构建错误
- 如何在 CMake 中添加预编译标头用于 Visual Studio 生成器
- 通过 CMake 添加子项目
- CMake 添加不区分大小写的源文件
- CMake 添加和删除宏定义以编译共享库/可执行文件
- 尝试使用 CMake 添加库会导致错误
- cmake 添加外部已构建的库
- 如何使用 cmake 添加仅编译依赖项
- Cmake 添加没有源文件的目录
- CMake添加(测试)可执行文件
- 使用CMAKE添加仅汇编依赖项
- 使用cmake添加_crt_secure_no_warnings定义
- 通过cmake添加外部库(例如,特征)
- Cmake 添加包含路径到叮当声
- CMake 添加用于调用 clang 分析器的目标
- 使用FindLibrary.cmake向cmake添加非标准库
- 如何让CMake添加MagickWand库自动链接无处不在
- 如何为CMake添加外部DLL路径