【conan】包管理器中Editable Mode和Non-Editable Mode的区别

Jamil 发布于 2024-12-14 8 次阅读


在使用 Conan 进行包管理时,“可编辑模式”(Editable Mode)和“不可编辑模式”(Non-Editable Mode)是两种不同的开发和发布模式,它们的主要区别体现在包的构建、使用和更新方式上。


1. 可编辑模式 (Editable Mode)

含义

可编辑模式允许你直接使用源码目录中的代码,而不需要先构建和上传到本地或远程缓存中。它是一种适合开发阶段的模式,可以实时修改代码并立即看到效果。

适用场景

  • 开发阶段:需要频繁修改包的源码。
  • 调试阶段:快速验证修改的效果,而无需反复构建和发布。

优点

  • 即时生效:修改源码后不需要重新打包,修改立即反映在项目中。
  • 高效调试:省去了每次构建、上传和重新安装的时间。
  • 更直观:直接操作源码,避免因构建错误导致的调试困扰。

使用方法

  1. 将包设置为可编辑模式: conan editable add <path-to-source> <package-name>/<version>@<user>/<channel>
  2. 取消可编辑模式: conan editable remove <package-name>/<version>@<user>/<channel>

2. 不可编辑模式 (Non-Editable Mode)

含义

不可编辑模式是 Conan 的常规使用模式,包需要通过构建生成二进制文件,然后发布到本地缓存或远程仓库。使用此模式的包无法直接修改源码。

适用场景

  • 稳定阶段:包的开发已完成,需要确保使用的是不可修改的版本。
  • 部署阶段:将已测试和验证的包发布到远程仓库供其他团队使用。

优点

  • 版本管理:通过构建和发布的流程明确区分各版本,确保一致性。
  • 不可变性:使用的包不会意外被修改,从而提高稳定性。
  • 更适合分发:为团队或其他用户提供可靠的包。

使用方法

  1. 构建并上传包:
Bash
conan create . <package-name>/<version>@<user>/<channel> conan upload <package-name>/<version>@<user>/<channel> --all

主要区别对比

特性可编辑模式不可编辑模式
源码修改直接使用源码,无需重新构建源码修改后需要重新构建发布
开发效率高,适合频繁修改和调试低,修改后需完整构建和测试
稳定性较低,可能引入不稳定的更改高,保证包的版本一致性和不可变性
适用场景开发阶段、调试阶段稳定阶段、生产环境、团队分发
部署方式本地直接引用源码构建成二进制包并发布到缓存或仓库

总结

  1. 可编辑模式:适合开发者在本地快速迭代和调试包。
  2. 不可编辑模式:适合发布已完成的包以供使用,确保一致性和稳定性。

总体来说,可编辑模式在仅改变包内容的时候,可以不重新编译所有程序,因为引用这个被标记为可编辑模式的包的程序都将被指向直接编译出来的lib而不是conan data 中的conan 包。