我有一个项目,我正在尝试使用conan作为包管理器。 该项目使用了大量的图书馆,其中大部分都是自给自足的。但是,其中一些依赖于另一个库。 举一个具体的例子,假设我们有一个需要库A和B的项目P.A是自包含的,但B依赖于A进行编译和链接。
我可以轻松地为库A创建conanfile.py。我可以为项目P创建一个conanfile.txt。假设A和B尚未构建,我希望能够输入P的构建目录:
conan install ../ --build=missing
并且已经下载,编译和安装库A,然后下载编译并安装库B,其中B具有对A的正确引用。
编写B的conanfile.py的正确方法是什么?
答案 0 :(得分:3)
编写包B的包装配方时,指定它取决于A:
class PackageB(ConanFile):
requires = "A/1.0@user/stable"
当您在项目中指定依赖项时(使用conanfile.txt或conanfile.py),您可以像往常一样指定依赖项。柯南处理传递依赖,因此它知道它必须首先构建(或检索包二进制)包A,然后包B。
通常,程序包B的构建脚本必须考虑对A的依赖性。如果使用CMake,解决方案将使用cmake生成器,并使用包含目录的conanbuildinfo.cmake
,包A的库名称等。
文档详细说明了语法: http://docs.conan.io/en/latest/reference/conanfile.html#requirements
您可以检查一些已经管理传递依赖关系的现有包:
config()
方法):https://www.conan.io/source/Boost/1.60.0/lasote/stable