我对 CMake 还很陌生,我和我的同事决定在我们正在开发的一些项目中使用它。在这项工作中,每个人都负责项目的某些模块。布局如下:
ROOT
-> Module1
...
-> Module2 (depends on Module 1)
...
-> Module3 (depends on Module 2 and 1)
每个ModuleN
有自己的CMakeLists.txt
文件,并且必须能够编译、测试和完成,然后才能将它们组合到整个项目中。现在,我对使用什么方法使这些依赖项起作用感到非常困惑。
我的研究向我展示了一些方法(例如添加 add_directory
指令等),但其中一些人提示这种方式可以不必要地多次编译项目(例如本例中的 Module1
);或者需要给出完整路径。
该项目不会安装到目标计算机上,因此我也无法使用系统库文件夹、包含程序等。每个开发人员都在不同的文件夹中拥有此存储库,因此我也无法提供“准确”的文件夹。我可以使用类似“../Module1”的语法来表示 add_directory
命令?这会导致“不必要的构建”吗?
此外,人们通常建议输入 CMakeLists.txt
文件也在项目的根目录中,但我认为这样我们总是必须从根目录构建 - 因此模块不能单独构建和测试。
使这成为可能的“菜鸟方法”是什么?正如我所说,我对 CMake 很陌生,老实说,我什至不知道搜索这样的东西的“关键字”(搜索“添加依赖项”会带来一些我只是淹没在其中的结果:))
最佳答案
Module1 中的 CMakeLists.txt 应创建一个库目标 [add_library(Module1 ...sources...)
](例如称为 Module1)。
Module2 中的目标可以链接此库 [target_link_library(mytarget Module1)
]。
然后模块 3 可以链接模块 2 中的目标。
您还可以为目标 Module1 和 Module2 注入(inject)公共(public)和私有(private)包含目录,以便使用它们的目标可以继承包含搜索路径。
深呼吸并阅读文档(两次!)
关于CMake - 添加对其他项目的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36012523/