虽然在 C++ 中用包管理器不如其他语言常见而且稍显抽象,但是相比于弄一个third目录,还是现代得多。文本讨论在 cmake 和 xmake 中离线使用包管理。

CPM.cmake

CPM.cmake 是一个跨平台的 CMake 脚本,它为 CMake 添加了依赖项管理功能。它基于 CMake 的 FetchContent 模块构建,并添加了版本控制、缓存、简单的 API 等功能

方法:在include(cmake/CPI.cmake)之前,添加set(CPM_SOURCE_CACHE "packages"),之后在联网机器上编译后,源代码就集成到了 packages 里。CPM 本就会将包的源代码缓存到某个位置,如果缓存到本项目目录,离线设备就可以不要从网上下载依赖。

Xmake

一个基于Lua的轻量级跨平台自动构建工具 现代化的 C/C++ 构建工具

xmake 内置导出包和导入包功能。在联网机器上成功构建后,执行xmake require --export,会将依赖包导出到 packages 目录里,随后到离线设备上执行xmake require --import就可以将包导入到本机集中缓存里。下次使用也不需要在下载。


实际上,从外在表现上看,这跟常见的third方法非常像。但是二者的好处:版本管理和更规范的包引用方式,都是手工方案无法达到的。