【问题标题】:How to avoid listing dependencies twice when packaging with Conan?用柯南打包时如何避免两次列出依赖?
【发布时间】:2019-12-13 16:55:31
【问题描述】:

我目前正在尝试将项目打包为柯南包。这个项目已经管理了它与柯南本身的依赖关系,因此有一个conanfile.txt 列出了它的依赖关系。我在how the documentation suggests doing it 之后在回购中做。

现在我想打包这个项目,但我不知道简单地让 conanfile.txt 成为项目依赖项的引用的正确方法,以及是否可以利用它已经存在的事实来代替重新列出conanfile.py 中的所有依赖项。我可以通过删除conanfile.txt 和using the conanfile.py as a consumer 来跳过它,但这会强制对我想避免的配方中的实际build() 步骤进行更复杂的处理。我还想让开发库的人能够按照他们喜欢的方式构建它,除了依赖管理之外,不一定要通过柯南。

有没有办法从柯南配方中获取项目依赖项,而不是在柯南配方的conanfile.txt 和requires 变量中列出两次依赖项?如果可能的话,我想避免阅读 conanfile.txt 并手动将依赖项逐行输入到 requires 变量中。

我知道我可能正在寻找一种不适合柯南设计和/或包装应该如何运作的方式。

【问题讨论】:

  • 如果您使用 cmake 构建项目,您可以在 conanfile.py 中列出所有依赖项。当您使用 cmake 构建项目时,它只需要依赖项并跳过 build() 步骤。就像您将 conanfile.txt 传递给您的 cmake 一样。这种方法可以让您避免两次列出依赖项...

标签: c++ dependency-management conan


【解决方案1】:

您可以使用conanfile.txt,但我强烈建议您使用conanfile.py。 您也可以运行conan install .,并安装conanfile.py 中列出的所有依赖项。由于命令 install 不会运行您的 build() 部分,我看不到问题。

无论如何,您可以在conanfile.py 中创建一个基类,它会加载conanfile.txt 内容并过滤需求。忘了,这听起来比只使用conanfile.py 更复杂。

在功能方面,没有办法,柯南不加载两个文件。默认情况下,它将conanfile.py 并忽略conanfile.txt。您不能同时通过参数或变量来强制。

【讨论】:

  • 您没有另外说,但为了清楚起见,您可以在两者都存在时使用 .txt 或 .py 显式 (conan install ../conanfile.txt)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2020-07-11
  • 2020-07-08
相关资源
最近更新 更多