使用柯南构建多个库并打包它们以在没有柯南的情况下使用

Posted

技术标签:

【中文标题】使用柯南构建多个库并打包它们以在没有柯南的情况下使用【英文标题】:Using Conan to build multiple libraries and packaging them to be used without Conan 【发布时间】:2021-12-09 09:58:08 【问题描述】:

我对柯南很陌生,现在我完全迷失在文档中,我无法真正找到一种方法来做我想做的事。

也许我没有使用正确的工具,我非常愿意接受建议。

假设我的 C++ 项目需要构建 opencv 和 nlohmann_json。 我希望能够创建我所有项目依赖项的存档以按原样使用,以便可以在我们的 gitlab 实例上重新分发它。

我想要一个大致如下所示的存储库:

├── conanfile.py
├── json
│   └── 3.10.4
│       └── conanfile.py
└── opencv
    ├── 4.4.0
    │   └── conanfile.py
    └── 5.1.0
        └── conanfile.py 

调用根 conanfile.py 将自动构建所需的库并复制它们的文件以具有如下内容:

├── conanfile.py
├── json
│   └── 3.10.4
│       └── conanfile.py
├── opencv
│   ├── 4.4.0
│   │   └── conanfile.py
│   └── 5.1.0
│       └── conanfile.py
└── win64_x86
    ├── include
    │   ├── nlohmann
    │   └── opencv2
    └── lib
        └── <multiple files>

CI/CD 将归档目录并使其可供下载。

我已经成功地使用 git 工具独立地构建和打包了一个非常简单的 repo (https://github.com/jameskbride/cmake-hello-world) 并执行了以下操作:

    def config_options(self):
        if self.settings.os == "Windows":
            del self.options.fPIC

    def source(self):
        git = tools.Git(folder="repo")
        git.clone("https://github.com/jameskbride/cmake-hello-world", "master")

    def build(self):
        cmake = CMake(self)
        cmake.configure(source_folder="repo")
        cmake.build()

但是,我不知道如何从我的主 conanfile.py 中获取我想要打包的文件。到目前为止,我尝试过的所有方法都需要单独构建包(即,转到文件夹,使用 conan source . conan build .conan export-pkg .。我 100% 确定我没有正确执行此操作,但我真的找不到办法做到这一点。我在文档中找到了一些关于 deploy() 的内容,但不知道如何使用它......

注意:我真的,真的不喜欢使用带有预构建二进制文件的远程依赖项。我想使用我定义的 CMake 配置从源代码构建所有内容。 最后我也明确地不想要柯南包。我只想汇总所有需要直接发送到机器上的文件。

【问题讨论】:

您的意思是您不想从第三方远程(如 ConanCenter)获取二进制文件,还是不想存储已编译的二进制文件?你为什么要一次又一次地从源代码中重建完全相同的二进制文件?当然,您是从源代码构建所有内容,但不会不必要地重复完全相同的构建。 为了从柯南包中提取文件并聚合它们,您需要使用imports 功能。在 conanfile.txt 中以 [imports]imports() 方法存在。如果您想要包内容的完整副本,-g deploy 生成器也会这样做。 我只是不想从第三方获取是的。我将缓存构建,我只想自己从源代码构建它们。谢谢,我会调查imports 更新:我已经和柯南混了几个小时,结果证明:我不知道我在做什么。我现在对流程有了更多的了解,而且我几乎可以做我想做的事。非常感谢,很抱歉造成混乱。 我建议您关注文档中的某些部分,例如类似教程的 docs.conan.io/en/latest/creating_packages/getting_started.html,或者 docs.conan.io/en/latest/training_courses.html 中的免费培训课程(动手、自定进度的视频课程),有助于快速了解该工具。 【参考方案1】:

柯南的联合创始人詹姆斯在这里回答了这个问题:https://github.com/conan-io/conan/issues/9874

基本上:

使用 CMakeDeps 生成器代替 cmake / cmake_find_package 在安装时从主 conanfile.py 的 generate() 方法中修补生成的 cmake 配置文件 相应地编辑食谱(但大多数时候应该没问题)

【讨论】:

以上是关于使用柯南构建多个库并打包它们以在没有柯南的情况下使用的主要内容,如果未能解决你的问题,请参考以下文章

柯南构建混合发布和调试

避免在柯南配置文件和 CMake 之间重复配置

如何在openSUSE Tumbleweed上安装柯南包管理器最正确?

为啥我不能链接到用柯南安装的 spdlog 库

是否可以在柯南包管理器中使用 github 分支?

柯南从容器内部失败,出现“sudo:未找到”错误