如何将一个包与Conan相互依赖的库结合起来?
我有一个项目,我正试图使用柯南作为包经理。 该项目使用了大量的库,其中大部分是自给自足的。然而,其中一些依赖于另一个库。 举一个具体的例子,假设我们有一个项目P,它需要库a和B。a是自包含的,但B依赖于a进行编译和链接 我可以轻松地为库A创建conanfile.py。我可以为项目p创建conanfile.txt。假设A和B尚未生成,我希望能够在p的生成目录中键入:如何将一个包与Conan相互依赖的库结合起来?,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
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生成器,并使用包A的包含目录、库名称等的conanbuildinfo.CMake
这些文档详细说明了语法:
您可以检查一些已经在管理可传递依赖项的现有包:
- ZMQC++封装器,它依赖于ZMQ,并且是一个非常简单的例子,因为包装器仅是头文件:
- Boost(取决于Zlib、BZip,但有条件地检查conanfile的
方法):config()
- Poco也有条件地依赖于OpenSSL、MySQLClient: