【问题标题】:How to specify requirements conditionally in `conanfile.txt`?如何在 `conanfile.txt` 中有条件地指定要求?
【发布时间】:2019-12-07 23:26:36
【问题描述】:

我必须处理一个跨平台应用程序,它在 Windows 上需要额外的 3rd 方库,但在 Linux 上不需要(而且该库不支持 Linux)。我已将库打包到 Conan 包中,仅支持 `os=Windows complier="Visual Studio"。现在如果我把这个库作为

[requires]
Library/1.2.3@foo/bar

在我的conanfile.txt 中,conan install 在逻辑上将失败并在 Linux 上出现错误 Missing prebuilt package

那么有没有办法在conanfile.txt 中有条件地指定所需的包?像Library/1.2.3@foo/bar [os="Windows"] 这样的东西。我通读了柯南文档,但一无所获。

或者告诉conan install忽略错误?

或者我唯一的运气是在两个平台上使用两个不同的conanfile.txt

我不能使用conanfile.py,因为构建过程不是由柯南管理的,只有依赖项。

【问题讨论】:

  • 如果构建过程由CMake管理,可以check for OS there并使用两个不同的conanfile.txts。
  • @nada 感谢您的评论,我只是想知道我是否可以以某种方式避免使用两个 conanfiles(有一行差异)。
  • 我会在 CMake 中为此编写一个脚本 ^^,肯定有更优雅的解决方案
  • 您应该仍然可以将 conanfile.py 用于依赖项。使用python文件不需要它来控制建筑。
  • @John 感谢您的建议。这是其他 C++ 项目迁移到使用 Conan 作为依赖项管理器的试点项目。最后我为每个平台建议了两个txt文件,并鼓励愿意学习python的开发者编写自己的conanfile.py。

标签: c++ artifactory dependency-management conan


【解决方案1】:

我会说在您的情况下最好的选择是 conanfile.py,但由于您无法使用它,您需要保留两个 conanfile.txt,每个平台一个。

在conanfile.txt中添加条件是不可能的,因为这会花费很大的开发精力,而conafile.py可以处理条件,因为它是一个python脚本。

@nada 解决方案不错,你可以根据你的操作系统使用 CMake 调用柯南,也可以试试cmake-conan,这听起来更适合你的具体场景。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2020-01-12
    • 2018-01-11
    • 2020-12-09
    相关资源
    最近更新 更多