【问题标题】:Conan.io - is it possible to do something similar to "python setup.py develop"?Conan.io - 是否可以做类似于“python setup.py develop”的事情?
【发布时间】:2016-12-13 10:34:59
【问题描述】:

我正在开发一个 C++ 包“dep”,我想在项目“app 1”和“app 2”中使用它,同时开发“dep”、“app 1”和“app 2”。当前的工作流程包括调用

  • conan export 在“dep”中,以及
  • conan install --build 在“应用程序 1”和“应用程序 2”中

对于“dep”中所做的每一个小改动。这个过程很繁琐,每次都会导致“dep”完全重建。

我知道柯南中的“test_package”功能,但它要求项目“app 1”和“app 2”与“dep”驻留在同一棵树中,这不是一个选项。

在 Python 的 setuptools 中,可以使用“python setup.py develop”来安装一个包,这样任何更改都可以立即用于依赖它的任何包。是否可以在柯南中做类似的事情,在构建“app 1”和“app 2”之前更新“dep”(如果有任何更改)?

【问题讨论】:

  • 我不完全理解您对“test_package”的意思要求项目 app1 和 app2 与“dep”在同一棵树中。
  • 如果我对documentation的理解正确,可以使用“test_package”命令快速构建“dep”并测试一个包(例如“app 1”)。这接近我想要实现的,即轻松构建“dep”中的任何更改,然后构建“app 1”,然后运行“app 1”以查看是否一切正常。但是在我的例子中,“app 1”不能放在“dep”中的“test_package”文件夹中,如文档示例中所示。
  • 也许你误解了“test_package”。它能够创建一个包,并使用任何所需数量的应用程序或包的测试来测试一个包。它的目的不是构建一个有用的应用程序,而只是测试一切是否正确构建和链接。如果 app1 和 app2 是您的“产品”或有用的应用程序,那么它们当然应该是独立的。所以关于“--build=missing”的答案可能已经足够好了。

标签: c++ deployment dependencies package-managers conan


【解决方案1】:

您无需一直发送--build。该选项强制重新构建完整的依赖关系树。您可以使用:

$ conan install --build=missing
or
$ conan install --build=app1

无论是否使用test_package,都不会重建依赖关系。

【讨论】:

  • 是的,可以,但需要手动操作。我想知道是否有任何自动方法来检测“dep”源的变化,如果有变化,请在“dep”中执行conan export,在“app 1”中执行conan install --build dep。我希望能够立即看到“dep”来源的变化。类似于我在“app 1”项目中包含“dep”的来源并一次性构建所有内容时会得到的行为。但我完全理解这是否目前不是柯南的一个选项。
  • 我认为问题在于你在谈论 CI,而柯南是一个包管理器。也许流程应该相反:CI 检测到“dep”有变化,然后使用 test_package 重新构建“dep”。然后,命令“conan info --build-order”可能会帮助 CI 系统知道它是否必须重建依赖于“dep”
  • 是的,我正在寻找的自动化可能必须是 CI 系统之类的东西的一部分。我想我只是想要柯南中“python setup.py develop”的便利性,但这绝对是一个更容易为 Python 包实现的功能,因为它们不必在源代码更改时构建,这当然是在 C++ 中就是这种情况。感谢您的反馈!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 2018-11-21
  • 1970-01-01
  • 2020-03-08
  • 2012-09-30
  • 1970-01-01
相关资源
最近更新 更多