Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMakeLists.txt相互交叉引用_Cmake_Circular Dependency - Fatal编程技术网

CMakeLists.txt相互交叉引用

CMakeLists.txt相互交叉引用,cmake,circular-dependency,Cmake,Circular Dependency,我正在尝试将项目从自定义构建脚本迁移到cmake。源结构大致如下所示: src | +-CMakeLists.txt | +-generated | | | +-CMakeLists.txt | | | +-database | | | +-... | +-main | +-CMakeLists.txt | +-database | +-... add_subdirectory("generated") add

我正在尝试将项目从自定义构建脚本迁移到cmake。源结构大致如下所示:

src
 |
 +-CMakeLists.txt
 |
 +-generated
 |  |
 |  +-CMakeLists.txt
 |  |
 |  +-database
 |  |
 |  +-...
 |
 +-main
    |
    +-CMakeLists.txt
    |
    +-database
    |
    +-...
add_subdirectory("generated")
add_subdirectory("main")
generated/database
中的源文件将自动生成
cmake
似乎能够做到这一点(这不是问题的一部分),但我想知道如何才能使它以正确的顺序构建内容
main/database
包含自动生成文件中使用的框架。但是,
main
中还有其他文件夹依赖于生成的源。如果我这样构造顶级
CMakeLists.txt

src
 |
 +-CMakeLists.txt
 |
 +-generated
 |  |
 |  +-CMakeLists.txt
 |  |
 |  +-database
 |  |
 |  +-...
 |
 +-main
    |
    +-CMakeLists.txt
    |
    +-database
    |
    +-...
add_subdirectory("generated")
add_subdirectory("main")
我不能将
generated/CMakeLists.txt
中的
main/database
称为依赖项

总的来说,我的印象是
cmake
迫使我根据文件的依赖关系来构造文件,但我希望保留当前的布局-项目中的依赖关系太复杂,无法将它们映射到文件系统层次结构

我应该避免
add_子目录
而将所有内容都写入顶级
CMakeLists.txt
?看来这应该是可能的。还是有别的办法解决这个问题

Overall, I have the impression that cmake forces me to structure
my files according to their dependencies
如果CMake具有目标A依赖于目标B的信息(例如
target\u link\u库(A B)
)B将首先构建,然后是A。 如果使用生成的源,CMake将无法获取依赖项信息 您需要使用提供它

从文件:

Adding dependencies with this command can be used to make sure one target
is built before another target.

换句话说,CMake文件中的顺序应该无关紧要。CMake将根据每个目标的依赖关系确定正确的顺序。请仔细说明。