Conan 2 学习之101文档

Conan2 介绍(侦探小说开场 · 面向团队同学)

午夜,CI流水线红灯亮起。
同样一份代码,A同学Windows编译顺利跑通;B同学本地编译报错链接符号缺失;CI服务器CentOS7直接崩溃闪退。
没有改业务代码,没有提交差异,仅仅是第三方库,同一个库,在三台机器上呈现三种完全不同的结局。
线索散落:手动拷贝的lib、本地编译残留产物、系统自带旧版库、ABI不兼容的二进制、层层嵌套的间接依赖。没有人能完整画出依赖关系图,bug随机复现,排查如同一桩无头悬案。
Conan2,就是这桩“C++依赖地狱”案件的侦探。

它是什么

Conan2是面向C/C++的跨平台包管理器,Conan1的重大重构版本,和CMake深度绑定。简单理解:给C++世界的pip/npm,专门侦查、统一管理VTK、OpenCASCADE、opennurbs、HDF5、CGNS这类海量第三方库,终结依赖随机翻车的谜案。

现实中我们遇到过的案件(真实工程示例)

案件1:“我本地好的,你那边崩”

  • 案情:Windows开发机手动编译VTK9.2,一切正常;提交CI,CentOS7编译,链接报错一堆未定义符号。同事电脑又能编译。
  • 作案原因:每个人本地编译VTK编译选项不一样,静态/动态、C++标准、编译器版本差异,没有统一记录,全靠每个人手工操作记忆。
  • Conan2破案:通过profile统一记录编译器、系统、编译选项,所有人、CI服务器使用同一套配置,自动拉取匹配二进制,消除“在我机器能跑”的玄学。
# conanfile.txt极简示例
[requires]
vtk/9.2.6
opencascade/7.7.0
opennurbs/0.0.1
[generators]
CMakeDeps
CMakeToolchain

执行命令:

conan install . --output-folder=build --build=missing

不需要每个人手动编译一遍庞杂的VTK/OCC。

案件2:间接依赖连环爆炸

  • 案情:我们引入A库,A库内部依赖zlib;项目本身又直接引入另一个版本zlib。没有任何编译报错,运行时随机崩溃、内存错乱。肉眼看CMakeLists完全看不出冲突。
  • 作案原因:C++不会自动校验传递依赖,版本冲突埋藏在二进制深处,属于很难复现的幽灵bug。
  • Conan2破案:自动解析完整依赖图谱,检测版本冲突,做版本收敛,清晰打印全部传递依赖,把隐藏线索全部摊开。

案件3:跨平台移植的无尽加班

  • 案情:Windows调通全部依赖,迁移到CentOS7,需要逐个下载源码、打补丁、配置编译参数,每个库踩坑几天,交叉编译更是噩梦。
  • Conan2破案:一份配置文件,Windows、Linux共用,需要就下载预编译包;没有现成包就自动本地编译,一套配方跑多平台。

案件4:CI构建速度灾难

  • 案情:每次CI触发,都完整编译VTK/OCC,一次流水线40分钟以上,改一行代码也要完整重编全部第三方库。
  • Conan2破案:二进制缓存机制,编译好的库缓存到本地/私有仓库,CI、开发机直接复用,不再重复编译重型第三方库,流水线时间大幅缩短。

Conan2 真正解决的4类核心问题

  1. 消除环境玄学:不再靠“手动拷贝库、本地编译备忘录”,依赖版本、编译参数全部文本化记录,代码仓库可追踪,任何人拿到代码,一套命令还原环境。
  2. 管控传递依赖:把看不见的间接依赖显性化,检测版本冲突,避免运行时随机崩溃。
  3. 跨平台统一构建:Windows、CentOS、CI服务器一套配置,不用每个平台维护一套编译脚本。
  4. 提速开发与CI:二进制缓存,避免重复编译VTK/OCC这种重量级库,同时支持搭建私有仓库,存放我们自己打包的内部库。

补充提醒:它和老版本Conan1语法不兼容,生成器全部更换,不再使用旧的conanbuildinfo.cmake,使用CMakeDeps+CMakeToolchain,原生配合CMake的find_package()。

简单工作流程

  1. 在项目里写conanfile.txt/conanfile.py,写明我们需要哪些第三方库;
  2. 执行conan install,工具自动解析依赖,下载匹配二进制,缺失则编译;
  3. CMake加载Conan生成的工具链文件,直接find_package(),无需手动写include、lib路径。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容