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

Using Conan to build multiple libraries and packaging them to be used without Conan

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

也许我没有使用正确的工具,我很乐意接受建议。

假设我的 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 配置从源代码构建所有内容。 最后我也明确地不想要柯南包。我只想要将需要直接发送到机器的所有文件的集合。

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

基本上:

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