Conan安装后conan --version报command not found主因是PATH未生效:Windows需重启终端或手动加Scripts路径,macOS/Linux需将~/.local/bin加入shell配置并重载;用conanfile.txt声明依赖时需配置[requires]和[generators],运行conan install --build=missing生成CMake所需文件;find_package(fmt)失败因Conan生成CONFIG模式文件,须用find_package(fmt CONFIG REQUIRED)并确保CMAKE_PREFIX_PATH包含deps目录;跨平台构建卡住常因无匹配预编译包而触发本地编译,应优先查可用二进制、用--build=never或调整settings避免编译。
conan --version 报 command not found?多数情况是 PATH 没生效。Windows 上用 Chocolatey 或 Scoop 安装后需重启终端;macOS/Linux 用 pip 安装时,cona 可能落在
n~/.local/bin,而该路径未被 shell 加载。
python -m pip show conan → 看 Location 和 Files 行export PATH="$HOME/.local/bin:$PATH" 加进 ~/.bashrc 或 ~/.zshrc,再执行 source ~/.zshrc
C:\Users\{user}\AppData\Roaming\Python\PythonXX\Scripts 加入系统环境变量
conanfile.txt 声明依赖并生成 conanbuildinfo.cmake?这是最轻量的集成方式,适合已有 CMake 项目的快速接入。Conan 不接管构建,只负责下载 + 生成 CMake 可读的配置文件。
conanfile.txt,内容示例:[requires] fmt/10.2.1 spdlog/1.13.0 [generators] CMakeDeps CMakeToolchain
conan install . --build=missing --settings compiler.cppstd=17
--build=missing 是关键,否则遇到预编译包不匹配(如 macOS M1 vs Intel)会直接报错退出conan_toolchain.cmake 和 xxx-deps.cmake 文件默认输出到当前目录,CMake 需显式加载:cmake -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake ...
find_package(fmt) 找不到,但 find_package(fmt CONFIG) 可以?因为 Conan 的 CMakeDeps 生成的是 CONFIG 模式文件(即 fmtConfig.cmake),它不走 CMake 默认的 FindXXX.cmake 路径搜索逻辑。
find_package(fmt CONFIG REQUIRED),且确保 CMAKE_PREFIX_PATH 包含 Conan 生成的 deps 目录(通常由 conan_toolchain.cmake 自动注入)conan install 输出末尾是否提示 Generated xxx-config.cmake,没有说明 CMakeDeps 未生效或包本身不提供 cmake targetsfind_package(fmt),可临时加一层兼容:include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) + conan_basic_setup()(仅限 legacy conanbuildinfo.cmake 方式)conan install 总卡在某个包的 build 阶段根本原因是 Conan 默认按 host 设置(OS/arch/compiler)匹配预编译二进制,一旦官方仓库没提供对应组合(比如 Windows + clang + static CRT),就会 fallback 到本地编译——而很多 C++ 包(如 OpenSSL、Boost)在非标准环境下编译失败率极高。
conan search fmt/10.2.1 -r conancenter,看输出中是否有匹配你 --settings 的行--build=never 强制只用二进制;或指定更通用的 settings,例如把 compiler.runtime 从 MT 改成 MD(Windows 动态链接 CRT)CONAN_CMAKE_GENERATOR 和 CONAN_CMAKE_TOOLCHAIN_FILE)真正麻烦的从来不是“怎么让 Conan 下载”,而是“怎么让它别自己编译”。每个包的编译脚本质量参差不齐,尤其涉及汇编或平台特有 ABI 时,本地编译极易失败。建议优先锁定已验证的二进制版本,再通过 conan lock 固化依赖图。