使用柯南构建多个库并打包以在没有柯南的情况下使用
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 配置文件
- 相应地编辑食谱(但大多数时候应该没问题)
我对柯南还很陌生,目前我完全迷失在文档中,我无法真正找到一种方法来做我想做的事。
也许我没有使用正确的工具,我很乐意接受建议。
假设我的 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 配置文件
- 相应地编辑食谱(但大多数时候应该没问题)