使用 conan#
警告
请确保网络可访问 github (例如 "steam++工具箱" 中可以选择加速 github 访问).
提示
同样地, 该方法适用于任何支持 CMake 的软件 (Visual Studio 2022、Qt Creator、CLion 等).
如果是 2024 年 2 月 24 日前的旧学习模板, 请先更新学习模板 (cpp_novice, ppp2_novice 或 ppp3_novice).
安装 conan#
2024 年 10 月 14 日后, 教程已经默认安装好 conan.
Windows (MSYS2)#
通过 C:\msys64
) 找到 clang64 或 clang64.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
为例, 搜索结果中将会显示第三方库的最新版本, 点击可以查看更多信息.

网页搜索 fmt
#
通过终端搜索#
打开 conan search <package_name>
进行搜索, 其中 <package_name>
是你要查找的包名.
以 fmt
为例, 将返回如下结果:

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

终端搜索 '*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 找到第三方库, 并将第三方库链接到程序中.
通过某种方式 (此处为 conan) 下载第三方库并告知 CMake 第三方库的存在.
在 CMake 中查找第三方库, 这一般通过
find_package(<第三方库包名> CONFIG REQUIRED)
进行.在 CMake 中链接第三方库, 这一般通过
target_link_libraries(<程序名> PRIVATE <第三方库目标名>)
进行.
第三方库的添加即依次进行以上步骤.
下载并告知 CMake 第三方库的存在#
以库 fmt/10.2.1
和 range-v3/0.12.0
为例.
在 cpp_novice
文件夹根目录中找到 conanfile.txt
, 在 [requires]
下方添加一行 fmt/10.2.1
和 range-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 中使用第三方库:

conan 给出的提示: find_package(<包名>)
和 target_link_libraries(... <目标名>)
#
在 CMake 中查找并链接第三方库#
我为了新手使用方便, 对这个流程进行了简化.
打开 CMakeLists.txt
, 找到 add_program_options
:
在
DEPENDENCIES
下方添加包名fmt
和range-v3
.在
LIBRARIES
下方添加目标名fmt::fmt
和range-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
添加的程序均能使用该第三方库.
扩展阅读#
该教程是非常简化的方案, 因而可能不适用于某些情况. 如果需要更多应用或自定义, 请自行学习以下内容:
Conan 官方文档: Conan 2.0 Documentation
如何用 Conan 自定义包: Adding Packages to ConanCenter
我基于 conan 的项目模板: FeignClaims/cpp_conan_template