one package 如何与 Conan 相互依赖的库?

How does one package inter-dependent libraries with Conan?

我有一个项目,我正在尝试使用 conan 作为包管理器。 该项目使用了大量的图书馆,其中大部分是自给自足的。但是,其中一些依赖于另一个库。 举一个具体的例子,假设我们有一个项目 P 需要库 A 和 B。A 是自包含的,但是 B 依赖于 A 的编译和链接。

我可以轻松地为库 A 创建 conanfile.py。我可以为项目 P 创建 conanfile.txt。假设 A 和 B 尚未构建,我希望能够输入P 的构建目录:

conan install ../ --build=missing

让柯南下载、编译和安装库 A,然后下载编译和安装库 B,B 正确引用 A。

B的conanfile.py的正确写法是什么?

写包B的包配方时,指定依赖A:

class PackageB(ConanFile):
    requires = "A/1.0@user/stable"

当您在项目中指定依赖项时(使用 conanfile.txt 或 conanfile.py),您可以像往常一样指定依赖项。 Conan 处理传递依赖性,因此它知道它必须先构建(或根据需要检索包二进制文件)包 A,然后包 B。

包 B 的构建脚本通常必须考虑对 A 的依赖性。如果使用 CMake,解决方案是使用 cmake 生成器,并使用具有包含的 conanbuildinfo.cmake包 A 的目录、库名称等。

文档详细说明了语法: http://docs.conan.io/en/latest/reference/conanfile.html#requirements

您可以检查一些已经在管理传递依赖项的现有包: