conan+cmake最小可运行示例需严格包含两步:先执行conan install .. --build=missing生成build/generators/下的conan_toolchain.cmake和fmt-config.cmake,再在cmakelists.txt中include()该toolchain并find_package(fmt config required)链接fmt::fmt。

Conan + CMake 最小可运行示例,必须包含 conan install 和 find_package 两步,缺一不可;否则 target_link_libraries 会报 Unknown CMake command "find_package" 或链接失败。
conanfile.txt 必须声明依赖并启用 CMake generator
不要用空的 conanfile.py 或直接跳过依赖声明。最小配置只需三行:
-
[requires]指定你要用的库,例如fmt/10.2.1 -
[generators]必须含CMakeDeps(生成xxxConfig.cmake)和CMakeToolchain(统一编译参数) - 不写
[options]或[settings]也能跑通,但首次运行conan install时会自动推导本地环境
示例 conanfile.txt:
#[requires] fmt/10.2.1 #[generators] CMakeDeps CMakeToolchain
CMakeLists.txt 要先 include toolchain,再 find_package
顺序错了就找不到包:include() 必须在 project() 之后、find_package() 之前;否则 CMAKE_PREFIX_PATH 未生效,find_package(fmt CONFIG REQUIRED) 会失败。
CMake 4.3.2 Windows x86_64 历史版本安装包,适合旧项目兼容、构建环境回退、CMakeLists.txt 迁移验证、Visual Studio/Ninja/Makefile 生成器测试和 C/C++ 项目维护。
-
include(${CMAKE_CURRENT_LIST_DIR}/build/generators/conan_toolchain.cmake)—— 路径要和conan install输出一致,默认是build/generators/ -
find_package(fmt CONFIG REQUIRED)——CONFIG表示走 Config 模式,依赖 Conan 生成的fmt-config.cmake -
target_link_libraries(myapp PRIVATE fmt::fmt)—— 别漏掉::,fmt是 target 名,不是头文件名
最小 CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(myapp LANGUAGES CXX)
include(${CMAKE_CURRENT_LIST_DIR}/build/generators/conan_toolchain.cmake)
set(CMAKE_CXX_STANDARD 17)
add_executable(myapp src/main.cpp)
find_package(fmt CONFIG REQUIRED)
target_link_libraries(myapp PRIVATE fmt::fmt)
构建流程不能跳过 conan install
很多人以为 cmake .. 就能自动拉依赖,实际不会。conan install 是独立命令,必须显式执行,且需指定构建目录(通常为 build):
mkdir build && cd build-
conan install .. --build=missing -s build_type=Release——--build=missing确保没二进制时自动编译 - 执行后会在
build/generators/下生成conan_toolchain.cmake和fmt-config.cmake等文件 - 再运行
cmake .. && cmake --build .才能成功编译
常见错误:fmt::fmt 找不到或链接失败
最常踩的坑不是语法,而是路径和命名不匹配:
-
conan install在哪个目录下执行,include()就得指向对应build/generators/—— 如果你在build/rel里装,include就不能写死build/generators -
find_package(fmt CONFIG REQUIRED)中的fmt必须和conanfile.txt里写的包名完全一致(大小写敏感),fmt/10.2.1→fmt,不是fmtlib或fmtxx - 如果用的是 C 项目(非 CXX),别设
LANGUAGES CXX,也别用fmt::fmt—— 改用纯 C 库如zlib,并用find_package(ZLIB REQUIRED)+target_link_libraries(myapp PRIVATE ${ZLIB_LIBRARIES})
真正麻烦的从来不是写几行 CMake,而是 conan install 生成的路径和 CMakeLists.txt 里写的路径对不上,或者包名大小写/拼写差一个字符 —— 这类问题不会报错“找不到 conan”,只会静默失败,然后卡在 find_package。










