c++ 是否可以在conan缓存之外使用conan包的二进制文件?

qncylg1j  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(146)

假设我有两个项目:库和应用程序。应用程序在conanfile.txt中有库。通常当执行应用程序的依赖项conan install时,会下载库并将其编译为~/.conan/data/。是否可以将应用程序链接到当前正在工作的库(例如/home/path/to/code/Lib/cmake-build-release/lib/)?
我之所以要这么做是为了调试一个Lib的bug,这个bug唯一已知的重现方法是使用App。我希望能够快速地将std::cout添加到某些地方,然后增量地重新编译。重新构建整个conan包,每次都执行conan install太长了。我在考虑一些可以改变include路径和链接路径的hack。

olhwl3o2

olhwl3o21#

是的,这是可能的,Conan使用了与Python pip相同的方法:“可编辑的”软件包。你可以在文档的这一节中阅读更多关于它的信息:Editable packages。基本思想是:

  • 您可以使用cd libfolder并在edition中将其定义为一个包:conan editable add lib/1.0
  • 您可以在那里构建lib,例如conan install . + cmake ..conan build .
  • 你可以进入App文件夹cd appfolder并执行conan install .,你会看到lib/1.0被标记为“可编辑”,而不是来自Conan缓存,你可以构建App,它会将你的依赖项从本地libfolder链接到lib
  • 您对libfolder所做的每一个更改以及在那里进行的本地构建(增量构建),都将直接用于App,而无需将createexport-pkg放到Conan缓存中。

可编辑特性依赖于layout()方法中项目布局的lib/1.0中的正确定义。
如果不同的包lib和app生成了兼容的项目(如Visual Studio),则可以在IDE中加入这些项目,从而方便地同时开发和调试这两个包。

相关问题