gpt4 book ai didi

cmake - 如何在 CMake 中强制目标构建的顺序

转载 作者:行者123 更新时间:2023-12-04 08:57:40 32 4
gpt4 key购买 nike

我刚刚继承了用 CMake 构建的一团糟的项目。我的 CMake 知识为零,我怀疑以前的维护者也有同样的知识。
我需要强制项目之间的构建顺序。它曾经是:

=== BUILD TARGET foo1 OF PROJECT bar ...
=== BUILD TARGET foo2 OF PROJECT bar ...
=== BUILD TARGET foo3 OF PROJECT bar ...
我不得不添加一个项目和依赖项(在不同的目标中而不是上面的那些)。但是代码中充满了
# don't change the library order, it will break xyz  
target_link_libraries(foo3 other1 foo2 other2 foo1 other3)
你可以猜到,在我改变之后,我现在得到
=== BUILD TARGET foo1 OF PROJECT bar ...
=== BUILD TARGET foo3 OF PROJECT bar ...
foo3由于 foo2 无法构建标题没有被复制/安装/无论如何。我很确定,如果我可以强制 CMake 触发 foo2之前 foo3这个问题将得到解决。
但是,我试过:
target_link_libraries(foo3 foo2)
无济于事。我还是看 foo3触发前 foo2 .
我也试过
add_dependencies(foo3 foo2)
所以,我的问题:
  • 我可以看到 CMake 必须在内部构建的依赖关系图吗?
  • 如果某处碰巧有一个循环,我怎么知道并找到它?
  • 我可以强制目标构建的顺序吗?
  • 关于构建顺序还有其他问题吗?
  • 最佳答案

    CMake 是一个声明式构建系统。
    虽然您在 CMakeLists.txt 文件中编写的 cmake 程序是纯命令式执行的,但它构建的构建系统是声明性的。
    这意味着您无法控制目标的构建顺序。您指定要完成的工作,但未指定如何完成。那是抽象的。
    唯一的方法是在目标中添加依赖项。首先,在构建依赖目标之前构建所有依赖目标。
    您可以通过“target_link_libraries”和“target_sources”等命令添加依赖项。您可以使用非常通用的“add_dependencies”来添加更多与基本 C/C++ 编程相关的文件。

    关于cmake - 如何在 CMake 中强制目标构建的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63731650/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com