我正在尝试将项目从自定义构建脚本迁移到cmake。源结构看起来大致如下:
src
|
+-CMakeLists.txt
|
+-generated
| |
| +-CMakeLists.txt
| |
| +-database
| |
| +-...
|
+-main
|
+-CMakeLists.txt
|
+-database
|
+-...
generated/database
中的源文件自动生成。 cmake
似乎能够做到这一点(这不是问题的一部分),但我想知道如何让它以正确的顺序构建东西。 main/database
包含自动生成文件中使用的框架。但是,main
中的其他文件夹依赖于生成的源。如果我像这样构建顶级CMakeLists.txt
:
add_subdirectory("generated")
add_subdirectory("main")
我无法将main/database
中的generated/CMakeLists.txt
称为依赖。
总的来说,我的印象是cmake
迫使我根据它们的依赖关系构建我的文件,但是我想保留当前的布局 - 项目中的依赖项太复杂了,无法将它们映射到文件系统层次结构。
我应该避免add_subdirectory
并将所有内容写入顶级CMakeLists.txt
吗?看来这应该是可能的。或者还有另一种解决方法吗?
答案 0 :(得分:1)
Overall, I have the impression that cmake forces me to structure
my files according to their dependencies
如果CMake具有目标A取决于目标B的信息(例如
target_link_libraries(A B)
)B将首先构建,然后是A.
如果使用生成的源CMake无法获取依赖性信息
并且您需要使用add_dependencies提供它。
来自文档:
Adding dependencies with this command can be used to make sure one target
is built before another target.