Conan C++ 包管理器:完整指南与实战示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Conan C++ 包管理器:完整指南与实战示例

1. 什么是 Conan?为什么需要它?

Conan 是一个开源的、去中心化的 C++ 包管理器。它解决了 C++ 生态中最棘手的问题之一:依赖管理。与 Python(pip)、JavaScript(npm)、Rust(Cargo)等语言不同,C++ 长期以来缺乏一个标准工具来自动下载、构建和集成第三方库。开发者不得不手动下载源码、配置 include 路径、链接库文件,并痛苦地解决版本冲突。Conan 将这一切自动化。

Conan 支持所有主流操作系统(Windows、Linux、macOS)和编译器(GCC、Clang、MSVC、MinGW)。它能与多种构建系统协同工作:CMake、MSBuild、Makefiles、SCons、Bazel 等。Conan 中的包可以以源码形式分发(Conan 会为你的平台构建它们),也可以以预编译的二进制文件形式分发。这能节省大量时间,尤其是在拥有数十个依赖项的大型项目中。

Conan 的一个关键特性是其配置文件模型。你可以为每个平台/编译器定义一个配置文件(例如 "clang-14-release-x86_64" 或 "msvc-2022-debug-x86")。Conan 会自动选择或构建与你的配置文件兼容的包。这使其成为跨平台开发和 CI/CD 流水线中不可或缺的工具。

2. 安装 Conan

Conan 使用 Python 编写,并通过 pip 安装。建议在虚拟环境(venv)中安装,以避免与系统 Python 包发生冲突。

# 通过 pip 安装(推荐在虚拟环境中)
python -m pip install conan

# 验证安装
conan --version

# 更新到最新版本
python -m pip install --upgrade conan

安装后,建议立即配置默认的远程仓库——ConanCenter。它默认已添加,但你可以使用以下命令检查:

conan remote list

如果 ConanCenter 不存在,请添加它:

conan remote add conancenter https://center.conan.io

3. 快速上手——最小化实战示例

让我们创建一个简单的项目,使用 fmtlib(字符串格式化)和 zlib(数据压缩)库。

步骤 1:项目结构

mkdir my_conan_project
cd my_conan_project
mkdir src

步骤 2:conanfile.txt 文件

[requires]
fmt/10.2.1
zlib/1.3.1

[generators]
CMakeDeps
CMakeToolchain

[layout]
cmake_layout

步骤 3:CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.15)
project(MyConanProject CXX)

find_package(fmt REQUIRED)
find_package(ZLIB REQUIRED)

add_executable(my_app src/main.cpp)
target_link_libraries(my_app PRIVATE fmt::fmt ZLIB::ZLIB)

步骤 4:src/main.cpp 文件

#include <fmt/core.h>
#include <zlib.h>
#include <iostream>

int main() {
    // 使用 fmt
    fmt::print("Hello from Conan! Version: {}\n", FMT_VERSION);

    // 使用 zlib
    std::cout << "zlib version: " << zlibVersion() << std::endl;

    // 简单的压缩示例
    const char* data = "Hello, Conan! This string will be compressed.";
    uLong source_len = strlen(data) + 1;
    uLong dest_len = compressBound(source_len);
    char* compressed = new char[dest_len];

    int ret = compress(reinterpret_cast(compressed), &dest_len,
                       reinterpret_cast(data), source_len);
    if (ret == Z_OK) {
        fmt::print("Compression successful! Original: {} bytes -> Compressed: {} bytes\n", source_len, dest_len);
    }

    delete[] compressed;
    return 0;
}

步骤 5:构建项目

# 安装依赖并生成 CMake 集成文件
conan install . --build=missing

# 配置 CMake
cmake --preset conan-default

# 构建项目
cmake --build --preset conan-release

运行生成的可执行文件:

./build/Release/my_app

你将看到类似以下的输出:

Hello from Conan! Version: 100200
zlib version: 1.3.1
Compression successful! Original: 51 bytes -> Compressed: 37 bytes

恭喜!你已经成功使用 Conan 管理了 C++ 项目的依赖。

推荐