conan在windows上可用但需手动配置path、powershell执行策略及msvc环境;常见问题包括命令未找到、脚本被拒、profile不匹配和ide找不到头文件,根源在于windows执行模型与python生态的叠加影响。

Conan 在 Windows 上能用,但默认安装后常因环境变量、PowerShell 策略或路径权限问题直接报错——不是 Conan 本身有问题,而是 Windows 的执行模型和 Python 生态叠加导致的连锁反应。
conan 命令找不到:PATH 和启动终端选错
直接在 CMD 或普通 PowerShell 里敲 conan --version 报“不是内部或外部命令”,大概率是没把 Conan 加入系统 PATH,或者用了错误的终端。
- Conan 安装后(无论 pip 还是 exe 包)不会自动写入 PATH,必须手动添加:
%USERPROFILE%\AppData\Roaming\Python\Python3xx\Scripts(pip user 安装)或C:\Users\{user}\AppData\Local\Programs\Python\Python3xx\Scripts(全局 pip) - Anaconda/Miniconda 用户别用 CMD,必须用 Anaconda Prompt 或 Anaconda PowerShell Prompt,否则 conda 环境激活失败,pip 安装的 Conan 就不在当前环境里
- 改完 PATH 后要重启终端(不是关窗口,是彻底新开一个),否则 shell 缓存没刷新
PowerShell 执行被拒:Set-ExecutionPolicy 是硬门槛
在 Anaconda PowerShell Prompt 里运行 conan 仍报错“无法加载文件…因为在此系统上禁止运行脚本”,这是 Windows 默认策略拦截了 Python 脚本启动器(conan.exe 实际是 Python 脚本包装器)。
- 必须以管理员身份打开 PowerShell,运行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 不要用
-Scope LocalMachine,那需要系统级权限,且对普通用户不必要 - 执行后不用重启,新打开的 PowerShell Prompt 就生效
- 这步跳过,
conan install会卡在 profile 检测或直接退出,无任何明确错误提示
conan install . 失败:default profile 缺失或架构不匹配
执行 conan install . 时卡住、报 Cannot detect compiler 或下载空包,基本是 profile 配置没对上本地 MSVC 工具链。
- 先运行
conan profile detect --force生成默认 profile(路径在conan config home输出目录下的profiles\default) - 检查生成的
default文件里compiler=msvc和compiler.version是否匹配你已安装的 Visual Studio 版本(比如 VS 2022 对应193,VS 2019 是192) - 如果用的是 Clang-CL 或 MinGW-w64(如 MSYS2),profile 必须显式改成
compiler=clang或compiler=gcc,不能依赖 auto-detect - MSVC 用户注意:必须在 对应版本的 x64 Native Tools Command Prompt(如 VS2022 的)里运行
conan install,否则cl.exe不在 PATH,Conan 会误判编译器不可用
头文件和 lib 没法进 IDE:缓存路径太深,CMake 找不到
Conan 默认把 zlib、fmt 这类库解压到 %USERPROFILE%\.conan2\p\b\... 这种嵌套极深的哈希路径下,Visual Studio 或 CMake 直接加附加包含目录几乎不可能手写对。
- 别手动拷贝文件。正确做法是在
conanfile.py里启用generators = "CMakeDeps", "CMakeToolchain",然后用conan install . -s build_type=Release --build=missing - 生成的
conan_toolchain.cmake和xxx-release-x86_64-data.cmake会放在当前目录,CMakeLists.txt 里用include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake)即可自动注入 include path 和 link dirs - 如果坚持要“平铺”到工程目录,得在
conanfile.py的layout()方法里重定义self.folders.generators和self.folders.build,但这会破坏 Conan 的缓存复用逻辑,仅适合极简原型项目
Windows 上 Conan 最容易被忽略的点,其实是它和底层构建工具的耦合深度——它不只管下载,还依赖 cl.exe / link.exe 的存在性、环境变量(如 VCToolsInstallDir)、甚至 VS Installer 里勾选的“C++ CMake 工具”组件是否完整。一旦其中一环断开,错误信息往往藏在日志深处,而不是命令行第一屏。











