我有没有分成库的项目,但源是在目录树中组织的.我不知道如何告诉cmake进入目录,然后将该目录中的源添加到父目录中定义的项目.我尝试过以下方法:
在project/source/CMakelists.txt中:
set(SOURCE
${CMAKE_CURRENT_SOURCE_DIR}/unitTest/main.cpp
)
add_subdirectory("${PROJECT_SOURCE_DIR}/folder1")
add_executable(UnitTestRNG ${SOURCE} ${HEADERS})
Run Code Online (Sandbox Code Playgroud)
然后在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
)
Run Code Online (Sandbox Code Playgroud)
使用一些message()语句,我发现子文件夹将获取SOURCE变量的内容,但是对该变量的新赋值将不会在返回到父CMakeLists.txt时持续存在
寻找示例并在cmake教程中得出结论: - 源文件结构通常在项目中是平的 - 如果代码被分成文件夹,它通常被分成相应的库.
我想知道是否有一些"最佳实践",我通过尝试这种结构而偏离它.
Chr*_*uns 34
就像arrowdodger的第二部分的答案所说:在project/source/folder1/CMakeLists.txt中:
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
)
Run Code Online (Sandbox Code Playgroud)
小智 27
从 CMake 3.1 开始,有一种从子目录添加源代码的新方法: target_sources
假设您在两者中都有root_dir
和root_dir/sub_dir
和源文件。有了target_sources
你可以这样做:
在root_dir/CMakeLists.txt
定义目标
add_library(some_target main.cpp)
add_subdirectory(sub_dir)
Run Code Online (Sandbox Code Playgroud)
在root_dir/sub_dir/CMakeLists.txt
添加来源:
target_sources(some_target PRIVATE more_cool_stuff.cpp)
Run Code Online (Sandbox Code Playgroud)
some_target
现在将包含两个源文件。
也可以在root_dir/sub_dir/CMakeLists.txt
using 中使用其他命令some_target
,例如target_compile_definitions
添加编译定义非常方便。
我在这里了解到target_sources
,如果您需要更多解释和示例,请查看
归档时间: |
|
查看次数: |
59087 次 |
最近记录: |