conan.lock 是依赖解析后自动生成的快照,必须用 conan lock 命令生成并显式通过 --lockfile 参数启用;手动编辑、缺失 conanfile、远程不可达、未加 --lockfile 或锁文件被 Git 格式化均会导致固定失效。

conan.lock 文件不是用来“固定”依赖的开关,而是依赖解析完成后自动生成的结果快照——你不能手动编辑它来“固定”,必须靠 conan lock 命令生成并由后续命令尊重它。
conan lock create 生成锁文件时依赖未解析?
常见现象是执行 conan lock create . 后,conan.lock 里只有一堆空字段或报错 ERROR: Cannot resolve dependencies。这通常是因为当前目录下没有有效的 conanfile.py 或 conanfile.txt,或者文件中 requires 写法有误(比如版本号拼错、远程仓库不可达)。
- 确保
conanfile.py中requires是合法字符串列表,如["zlib/1.2.13", "fmt/10.2.1"],不要写成"zlib/1.2.13, fmt/10.2.1" - 运行前先确认远程可用:
conan remote list,必要时添加 Conan Center:conan remote add conancenter https://center.conan.io - 如果项目依赖私有包,需提前
conan remote add对应私仓,并确保认证通过
conan install 不读 conan.lock?
即使已有 conan.lock,默认 conan install . 仍会重新解析依赖树,忽略锁文件。这是最常被忽略的行为陷阱。
- 必须显式加
--lockfile参数才强制使用锁定版本:conan install . --lockfile=conan.lock - 若想让 CI 流水线彻底杜绝解析波动,建议在所有 install 命令后都加上该参数,且禁止省略等号(
--lockfile conan.lock在某些 Conan 版本中不生效) - 注意:
--lockfile仅约束依赖版本和二进制 ID,不约束settings或options—— 如果构建环境变了(比如从os=Linux切到os=Windows),Conan 会拒绝复用旧锁文件并报错Incompatible settings
锁文件被意外修改或未提交?
conan.lock 是二进制兼容性事实来源,但它本身是纯文本 JSON(带注释),容易被 IDE 自动格式化、Git 换行符转换或手误编辑破坏哈希一致性。
- Git 提交前务必检查
conan.lock是否被重排或删了注释 —— Conan 会校验整个文件内容 SHA256,哪怕多一个空格也会导致conan install --lockfile失败 - 建议在
.gitattributes中为conan.lock设置text=auto eol=lf,避免 Windows/Mac/Linux 混合开发时换行符污染 - 团队协作中,CI 应增加校验步骤:
conan lock check conan.lock(Conan 2.4+ 支持),失败则中断构建
真正关键的不是“怎么生成 lockfile”,而是“如何确保每次 install 都严格按它走”。一旦漏掉 --lockfile,或锁文件内容被 Git 意外改写,所谓“固定依赖”就只剩心理安慰了。


















