# Conan+CMake基本编译流程
# 本地编译
# 1. Conan 安装依赖
首先,使用 Conan 安装项目所需的第三方包。Conan 会根据构建类型(Debug/Release)将生成的文件放置在不同的目录中。
-
默认情况下,Conan 会创建
build/Release/generators
目录来存放生成文件。conan install . --build=missing
-
可以明确指定构建类型,例如
Debug
。conan install . --build=missing -s build_type=Debug
-
--output-folder
参数可以指定输出目录,但通常不是必需的,因为 Conan 会根据配置自动管理路径。
# 2. CMake 配置与编译
Conan 在安装依赖后,会自动生成一个 CMake 预设文件 (CMakeUserPresets.json
),其中包含了配置和编译所需的全部信息。因此,推荐直接使用预设来简化操作。
# 使用 CMake 预设(推荐)
-
配置 CMake
使用
conan-debug
或conan-release
预设来配置项目。# 配置 Debug 版本 cmake --preset conan-debug # 配置 Release 版本 cmake --preset conan-release
-
编译
同样使用预设来执行编译。
# 编译 Debug 版本 cmake --build --preset conan-debug # 编译 Release 版本 cmake --build --preset conan-release
# 手动配置
如果不使用预设,则需要手动指定工具链文件和构建类型。
-
配置 CMake
# 配置 Release 版本 cmake -S . -B build/Release -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=build/Release/generators/conan_toolchain.cmake \ -DCMAKE_BUILD_TYPE=Release # 配置 Debug 版本 cmake -S . -B build/Debug -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=build/Debug/generators/conan_toolchain.cmake \ -DCMAKE_BUILD_TYPE=Debug
-
编译
# 编译 Release 版本 cmake --build build/Release # 编译 Debug 版本 cmake --build build/Debug
# 交叉编译
# 1. 创建 Profile 文件
首先,需要为目标平台创建一个 Conan Profile 文件。例如,为 aarch64 架构创建一个 profiles/aarch64_profile
文件。
[settings]
os=Linux
arch=armv8
compiler=gcc
compiler.version=15.2
compiler.libcxx=libstdc++11
compiler.cppstd=20
[conf]
# 告诉 Conan 加载我们自定义的 CMake 工具链文件
# 使用 tools.cmake.cmaketoolchain:user_toolchain 来指定
# 注意: ${profile_dir} 是 Conan 变量,但实践中建议使用绝对路径以确保正确识别
tools.cmake.cmaketoolchain:user_toolchain=["/path/to/your/project/cmake/aarch64-toolchain.cmake"]
在对应的 .cmake
工具链文件中,你需要设置交叉编译所需的编译器、系统根目录等环境变量。
# 2. 执行编译流程
交叉编译的流程与本地编译非常相似,区别在于需要在 conan install
命令中通过 -pr:h
参数指定 Host 平台的 Profile 文件。
-
Conan 安装依赖
conan install . --build=missing -s build_type=Debug -pr:h profiles/aarch64_profile
-
配置 CMake
Conan 同样会生成适用于交叉编译的 CMake 预设。
cmake --preset conan-debug cmake --preset conan-release
-
编译
cmake --build --preset conan-debug cmake --build --preset conan-release