conan inspect 只显示配方中硬编码的 default_options,不反映实际解析后的选项;准确查看各包最终选项应使用 conan info . --only=options 或 --graph。

conan inspect 能看到包的 default_options 吗
不能直接看到运行时生效的构建选项,conan inspect 只显示配方(recipe)里硬编码的 default_options,不反映你当前环境实际解析出的值。比如 zlib/1.2.13 配方里写了 "shared=True",但如果你在 conanfile.txt 里显式设了 zlib:shared=False,conan inspect 仍会显示 True。
真正起作用的是 conan install 过程中解析后的最终选项,得用别的命令查。
用 conan info --graph 查依赖树和实际选项
conan info 是唯一能准确反映当前配置下各包最终构建参数的命令。它会根据你的 conanfile.py 或 conanfile.txt、settings、options 和远程仓库状态,计算出完整的依赖图和每个包的实际选项值。
- 生成 HTML 可视化图:
conan info . --graph=deps.html,打开后每条边都标有该包的options(如shared=True)、settings(如build_type=Debug) - 纯文本输出(适合快速扫):
conan info . --only=options,只打印所有包的最终 options 字典 - 要确认某个包(比如
poco)是否启用了 SSL 支持,就看输出里poco/1.12.4对应的options行有没有ssl=True
conan search 查不到构建选项,只能查包是否存在
conan search 本质是查本地缓存或远程仓库里“有没有这个包”,它不关心构建选项,也不做解析。执行 conan search zlib/1.2.13@ 只会列出本地已有的 zlib 二进制包路径,比如:
zlib/1.2.13@user/channel
Package_ID: 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.version=11
os=Linux
[options]
shared=True
注意:这里的 [options] 是该二进制包**构建时实际用的选项**,但它只对已存在的包有效;如果还没安装过这个组合,conan search 就不会显示任何 [options] —— 它不预测,只陈列事实。
为什么 conan install 后再查更可靠
Conan 的选项不是静态绑定的,而是随 settings、profile、命令行 -o 参数动态计算的。同一个 zlib/1.2.13,在 build_type=Debug 下生成的包和 build_type=Release 下的包是两个完全独立的二进制,它们的 options 可能一致,也可能因 profile 规则不同而分化。
所以最稳妥的做法是:
- 先写好
conanfile.txt或conanfile.py - 用完整命令触发一次
conan install(哪怕加--dry-run),确保环境上下文就绪 - 再跑
conan info . --only=options或--graph
跳过安装直接查,等于查一张没填完的表——缺 settings 就算不准,缺 profile 就可能漏 override。











