gpt4 book ai didi

conan - 一个如何用柯南打包相互依赖的库?

转载 作者:行者123 更新时间:2023-12-03 07:29:39 42 4
gpt4 key购买 nike

我有一个项目,我正在尝试使用 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

您可以检查一些已经在管理传递依赖项的现有包:
  • ZMQ c++ 包装器,它依赖于 zmq,并且是一个非常简单的示例,因为包装器仅是 header :https://www.conan.io/source/zmqcpp/4.1.1/memsharded/stable
  • Boost(取决于 Zlib、BZip,但有条件地检查 conanfile 的 config() 方法):https://www.conan.io/source/Boost/1.60.0/lasote/stable
  • Poco,也有条件地依赖于 OpenSSL,MySQLClient:https://www.conan.io/source/Poco/1.7.3/lasote/stable
  • 关于conan - 一个如何用柯南打包相互依赖的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38706663/

    42 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com