相关疑难解决方法(0)

在CMake中保持跨子目录的文件层次结构

到目前为止,我仍然不明白为具有许多子目录的CMake项目执行此操作的"最佳实践"是什么.

假设我有一个项目层次结构,每个子目录中都有源文件......

--CMake Project Source dir
 |-- SubD1
   |-- SubSubD1
 |-- SubD2
Run Code Online (Sandbox Code Playgroud)

我通常要做的是add_subdirectory(SubD1)分别对根目录的CMakeLists.txt中的D2和SubD1目录的CMakeLists.txt中的子目录进行递归,同时在每个子目录中声明变量并使它们在根目录中可见与PARENT_SCOPE.

这意味着如果文件Source2.cpp存在于`SubSubD1'中,我就是这样做的

set(SUBSUBD1_SOURCES Source2.cpp PARENT_SCOPE)
Run Code Online (Sandbox Code Playgroud)

并希望能够在我的SubD1目录中使用SUBSUBD1_SOURCE .随后,说Source.cppSubD1中存在,我会这样做

set(SUBD1_SOURCES ${SUBSUBD1_SOURCES} Source.cpp PARENT_SCOPE)
Run Code Online (Sandbox Code Playgroud)

这样所有来源都可以在根目录中看到.

问题当然是当变量到达根目录时不保留文件路径.什么我目前做的是所有的源文件,我set,我包括${CMAKE_CURRENT_LIST_DIR},使它

set(SUBSUBD1_SOURCES ${CMAKE_CURRENT_LIST_DIR}/Source2.cpp PARENT_SCOPE)
Run Code Online (Sandbox Code Playgroud)

set(SUBD1_SOURCES ${SUBSUBD1_SOURCES} ${CMAKE_CURRENT_LIST_DIR}/Source.cpp PARENT_SCOPE)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以说,add_executable(myProg SUBSUBD1_SOURCES)在我的CMake项目的根目录中执行.

有没有更好的方法来执行此操作,然后必须始终在所有源文件前包含CMake变量?

c++ cmake

6
推荐指数
2
解决办法
4911
查看次数

标签 统计

c++ ×1

cmake ×1