假设我有两个项目。Lib和App。App的conanfile.txt
中有Lib。正常情况下,当执行应用程序的conan install
依赖时,conan下载并编译Lib到~/.conan/data/
。是否有可能将应用程序链接到当前正在开发的Lib(例如/home/path/to/code/Lib/cmake-build-release/lib/
)?
我想这样做的原因是调试一个Lib的bug,其唯一已知的方法是通过使用App来复制。我希望能够快速添加std::cout
到某些地方并逐步重新编译。重建整个柯南包,每次做conan install
太长了。我在考虑一些hack,可以改变包括路径和链接路径。
是的,这是可能的,Conan使用与Pythonpip
相同的方法:"editable"包。您可以在文档:可编辑包的这一节中了解更多信息。基本思想是:
- 将
cd libfolder
定义为conan editable add lib/1.0
- 您可以在那里构建
lib
,如conan install .
+cmake ..
或conan build .
- 你可以去App文件夹
cd appfolder
,做一个conan install .
。您应该看到lib/1.0
被标记为"editable"而不是来自柯南的藏身处你可以构建App
,它会把你的依赖从本地的libfolder
链接到lib
。 - 您对
libfolder
所做的每一个更改,并在本地构建(增量构建),将直接用于App
,而无需将create
或export-pkg
添加到Conan缓存。
可编辑特性依赖于项目布局的lib/1.0
中layout()
方法中的正确定义。有内置的布局,如cmake_layout(self)
。
如果不同的包lib和app生成兼容的项目,如Visual Studio,可以在IDE中加入这些项目,并方便地同时开发和调试两个包。在这个c++意大利语会议的演示中有一个现场演示