使用 conan#

警告

请确保网络可访问 github (例如 "steam++工具箱" 中可以选择加速 github 访问).

提示

同样地, 该方法适用于任何支持 CMake 的软件 (Visual Studio 2022、Qt Creator、CLion 等).

如果是 2024 年 2 月 24 日前的旧学习模板, 请先更新学习模板 (cpp_novice, ppp2_noviceppp3_novice).

安装 conan#

2024 年 10 月 14 日后, 教程已经默认安装好 conan.

Windows (MSYS2)#

通过 开始 菜单 (一般在左下角, Win11 在中间位置), 或 MSYS2 安装路径 (默认为 C:\msys64) 找到 clang64clang64.exe.

右键 该文件, 选择 以管理员身份运行.

pacman -S mingw-w64-clang-x86_64-python-conan

MacOS#

brew install conan

Fedora#

sudo dnf install python
pip3 install conan

Ubuntu/Debian#

sudo apt install python
pip3 install conan

在 cpp_novice 中启用 conan#

cpp_novice 文件夹根目录中找到 CMakeLists.txt, 在 include(cpp_novice_fetch_project_options), project(...) 之前添加一行 run_conan().

1cmake_minimum_required(VERSION 3.25)
2
3list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
4include(cpp_novice_fetch_project_options)
5run_conan()
6
7project(cpp_novice LANGUAGES CXX)

搜索第三方库#

通过网页搜索#

打开 Conan Center 进行搜索.

fmt 为例, 搜索结果中将会显示第三方库的最新版本, 点击可以查看更多信息.

../../_images/%E7%BD%91%E9%A1%B5%E6%90%9C%E7%B4%A2.png

网页搜索 fmt#

通过终端搜索#

打开 终端 (Terminal), 输入 conan search <package_name> 进行搜索, 其中 <package_name> 是你要查找的包名.

fmt 为例, 将返回如下结果:

../../_images/%E7%BB%88%E7%AB%AF%E6%90%9C%E7%B4%A2.png

终端搜索 fmt#

对于不确定的内容, 你可以用 * 表示通配, 但注意使用字符串包裹起来:

../../_images/%E7%BB%88%E7%AB%AF%E9%80%9A%E9%85%8D%E6%90%9C%E7%B4%A2.png

终端搜索 '*range*'#

添加第三方库#

根据搜索结果, 我们找到了 fmt/10.2.1. 假设这就是我们要使用的库.

要使用它则需要在合适的位置添加它, 为此先要简单理解 cpp_novice 的项目管理是如何达成的.

添加原理#

整个 cpp_novice 文件夹是用 CMake 进行的项目管理, 其配置文件即根目录下的 CMakeLists.txt.

打开 CMakeLists.txt 你可以看到 add_program(...) 函数, 这是我为了新手使用方便, 对 CMake 进行的简化: 通过 add_program(<程序名> <源文件1> [源文件2]...) 即可添加一个名为 <程序名> 的程序.

1add_program(example_multiple         # 程序名为 example_multiple
2  src/example_multiple/main.cpp   # 源文件 1
3  src/example_multiple/hello.cpp  # 源文件 2
4)

所谓添加第三方库, 就是由 CMake 找到第三方库, 并将第三方库链接到程序中.

  1. 通过某种方式 (此处为 conan) 下载第三方库并告知 CMake 第三方库的存在.

  2. 在 CMake 中查找第三方库, 这一般通过 find_package(<第三方库包名> CONFIG REQUIRED) 进行.

  3. 在 CMake 中链接第三方库, 这一般通过 target_link_libraries(<程序名> PRIVATE <第三方库目标名>) 进行.

第三方库的添加即依次进行以上步骤.

下载并告知 CMake 第三方库的存在#

以库 fmt/10.2.1range-v3/0.12.0 为例.

cpp_novice 文件夹根目录中找到 conanfile.txt, 在 [requires] 下方添加一行 fmt/10.2.1range-v3/0.12.0:

1[layout]
2cmake_layout
3
4[requires]
5fmt/10.2.1
6range-v3/0.12.0
7
8[generators]
9CMakeDeps

添加后, 以某种方式清除 cmake 缓存并重新配置你 IDE 中的 cmake (例如, 你也许可以删除 build 或 out 文件夹, 并重启软件或在命令菜单用 cmake configure), 此时 CMake 将会调用 conan 下载第三方库.

配置完成后, conan 将会提示我们如何在 CMake 中使用第三方库:

../../_images/conan_install%E7%BB%93%E6%9E%9C.png

conan 给出的提示: find_package(<包名>)target_link_libraries(... <目标名>)#

在 CMake 中查找并链接第三方库#

我为了新手使用方便, 对这个流程进行了简化.

打开 CMakeLists.txt, 找到 add_program_options:

  • DEPENDENCIES 下方添加包名 fmtrange-v3.

  • LIBRARIES 下方添加目标名 fmt::fmtrange-v3::range-v3.

 1add_program_options(
 2  DEPENDENCIES
 3  fmt
 4  range-v3
 5
 6  LIBRARIES
 7  fmt::fmt
 8  range-v3::range-v3
 9
10  INCLUDES
11  include
12)

此后, 所有用 add_program 添加的程序均能使用该第三方库.

扩展阅读#

该教程是非常简化的方案, 因而可能不适用于某些情况. 如果需要更多应用或自定义, 请自行学习以下内容: