Conan 的配置与使用
                    
                
                
                    本文面向已经“听说过 Conan”的同学,帮你把“能跑起来”到“能上线”的每一步都踩实。官方文档很香,但太长;这篇博客很干,但够短。
官网指路
Conan 官网:https://conan.io/
可用包速查:https://conan.io/center
官方完整文档(建议完整阅读一遍):https://docs.conan.io/2/index.html
1. 30 秒完成环境初始化
| 1 | # 1. 装 Conan(Python3 自备) | 
2. 先把项目摆成“Conan 喜欢的样子”
以 CMake 工程为例,推荐目录:
| 1 | conan-fmt-demo/ | 
最小可用 conanfile.txt
| 1 | [requires] | 
说明
fmt/10.1.1:告诉 Conan“我要这个版本”。
CMakeDeps + CMakeToolchain:自动生成fmt-config.cmake和 toolchain 文件,CMake 一句find_package(fmt)就能用。
想知道还有哪些版本?两条路:
| 1 | conan search fmt # 本地+远端一起搜 | 
3. 一条命令安装全部依赖
| 1 | conan install . --build=missing -s build_type=Release | 
- --build=missing:远端没有现成二进制就本地现编。
- 成功后会在 build/Release/generators/里吐出conan_toolchain.cmake。
4. 编译项目:两种姿势,任选
姿势 A:经典手写
| 1 | cmake -G "Unix Makefiles" \ | 
姿势 B:CMake ≥3.19 的 preset(真香)
| 1 | cmake --preset conan-default | 
老版本 CMake 想用 preset?官方教你曲线救国:https://docs.conan.io/2/tutorial/consuming_packages/use_tools_as_conan_packages.html
5. 踩坑现场:缺失系统库怎么办?
典型报错:
| 1 | ERROR: vaapi/system … No package 'libva' found | 
原因:vaapi/system 这类 system 包不会帮你编 libva,它假设系统里已经装好。
解决(Ubuntu/Debian 演示):
| 1 | # 1. 装 apt-file 并更新索引 | 
如果缺失的不止一个,可以偷懒用脚本:
| 1 | 
 | 
脚本会自动扫描 xorg/system、vaapi/system、vdpau/system 等常见 system 包,缺啥补啥,直到全部绿灯。
6. 私有仓库:又快又稳
6.1 添加仓库
| 1 | conan remote add myrepo https://your-private-repo.com --index=0 | 
--index=0把私有仓库置顶,优先级最高。
登录(仅上传时需要):
| 1 | conan remote login myrepo <user> -p <pass> | 
6.2 查看 / 调整顺序
| 1 | conan remote list | 
7. 把包推上去
场景 A:官方包直接迁到私有
| 1 | conan install --requires=ffmpeg/5.0@ --build=missing | 
场景 B:自研项目
| 1 | conan create . --user=mychannel | 
8. 命令小抄(建议收藏)
| 目的 | 命令 | 
|---|---|
| 查看本地缓存 | conan list '*' | 
| 删除本地包 | conan remove <ref> | 
| 搜索远端包 | conan search <pkg> -r myrepo | 
| 查看 profile 路径 | conan profile path default | 
| 编辑 profile | conan profile edit default | 
9. 结语
- 装好 Conan → profile detect→conan install,项目就跑起来了。
- 缺系统库 → apt-file搜-dev包,或者一键脚本。
- 私有仓库 → remote add --index=0置顶,上传一条命令搞定。
祝你编译愉快,一路无坑!
             Comments
        
        
    Comment plugin failed to load
    
    
    Loading comment plugin