CMakeLists.txt相互交叉引用

时间:2014-01-14 14:17:22

标签: cmake circular-dependency

我正在尝试将项目从自定义构建脚本迁移到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吗?看来这应该是可能的。或者还有另一种解决方法吗?

1 个答案:

答案 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.