我想知道如何管理外部项目的依赖关系。假设我有三个项目,每个项目都在不同的存储库中:
- 核心:库导出了很多有用的东西。
- Lib1:具有一些特定类的库(取决于Core)。
- Executable:使用来自Core和Lib1的东西。
每个项目都有其 CMakeLists.txt。在 CMake 上使用 find_package 和定义路径我可以毫无问题地构建每个项目并安装它(我按照这个教程为库构建 .cmake 文件)
现在我试图让这个过程尽可能简单,并且我正在引入 ExternalProject_Add 宏,这样人们只需要克隆Executable存储库,并且在 CMake 文件Lib1和Core的帮助下也可以下载、编译和链接。
问题是Executable和Lib1依赖于Core,但我希望它只被克隆(和编译)一次。这是问题所在:
- 在Executable CMake中,使用 ExternalProject_Add 功能克隆和构建Core 。
- 然后 Cmake 克隆Lib1并寻找Core但它尚未安装,因此没有core-targets.cmake文件(core-config.cmake可用)......并且构建失败......
我不知道是否有记录的方式来使用这种项目树,或者当Core作为外部项目的依赖项包含在内时,我是否应该编写某种解决方法以避免使用 core-targets.cmake 文件.
谢谢!
解决方案
我意识到,当使用 ExternalProject_Add 时,它会下载、构建和安装项目,因此,在安装文件夹中,我已经拥有编译其依赖项所需的所有文件。
所以我可以按照以下步骤管理这个问题(也适用于构建顺序):
- *ExternalProject_Add* 用于核心
- *ExternalProject_Add* 用于将核心 install_dir 作为参数传递的Lib1
- ...和可执行文件。