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