gpt4 book ai didi

cmake - 将子目录中的源添加到cmake项目中

转载 作者:行者123 更新时间:2023-12-02 17:52:50 24 4
gpt4 key购买 nike

我的项目尚未划分为库,但源代码组织在目录树中。我不知道如何告诉 cmake 进入一个目录,然后将该目录中的源添加到父目录中定义的项目中。我尝试过以下操作:

在项目/source/CMakelists.txt中:

set(SOURCE
${CMAKE_CURRENT_SOURCE_DIR}/unitTest/main.cpp
)
add_subdirectory("${PROJECT_SOURCE_DIR}/folder1")
add_executable(UnitTestRNG ${SOURCE} ${HEADERS})

然后在project/source/folder1/CMakeLists.txt中:

set(SOURCE
${SOURCE}
${CMAKE_CURRENT_SOURCE_DIR}/file1.cpp
${CMAKE_CURRENT_SOURCE_DIR}/file2.cpp
)
set(HEADERS
${HEADERS}
${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp
${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp
)

使用一些 message() 语句,我发现子文件夹将获取 SOURCE 变量的内容,但对该变量的新分配在返回到父 CMakeLists.txt 时不会持续存在

寻找示例并查看 cmake 教程使我得出以下结论: - 项目中的源文件结构通常是扁平的 - 如果代码被划分到文件夹中,通常会被划分到相应的库中。

我想知道我尝试这种结构是否偏离了一些“最佳实践”。

最佳答案

自 CMake 3.1 起,有一种从子目录添加源代码的新方法:target_sources

假设您有 root_dirroot_dir/sub_dir 以及两者中的源文件。使用target_sources,您可以执行以下操作:

root_dir/CMakeLists.txt中定义目标

add_library(some_target main.cpp)
add_subdirectory(sub_dir)

root_dir/sub_dir/CMakeLists.txt中添加源:

target_sources(some_target PRIVATE more_cool_stuff.cpp)

some_target 现在将包含两个源文件。

还可以使用some_targetroot_dir/sub_dir/CMakeLists.txt中使用其他命令,例如target_compile_definitions,非常方便添加编译定义。

我了解了target_sources here, check it out if you want more explanation and examples

关于cmake - 将子目录中的源添加到cmake项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com