【发布时间】: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 中的免费培训课程(动手、自定进度的视频课程),有助于快速了解该工具。