klogg - 快速高级日志浏览器
JNGL - 易于使用的跨平台 2D 游戏库
AALTITOAD - 滴答自动机的验证器和模拟器
子墨电子
ada - 用现代 C++ 编写的符合 WHATWG 的快速 URL 解析器
codon - 使用 LLVM 的高性能、零开销、可扩展的 Python 编译器
CRoaring - C(和 C++)中的咆哮位图,具有 SIMD(AVX2、AVX-512 和 NEON)优化:由 Apache Doris、ClickHouse 和 StarRocks 使用
这些示例演示了如何将一些知名项目纳入 CPM。请参阅 wiki 了解更多片段。
CPMAddPackage( "gh:catchorg/[email protected]" )
CPMAddPackage( "gh:ericniebler/range-v3#0.12.0" )
# as the tag is in an unusual format, we need to explicitly specify the version
CPMAddPackage( "gh:jbeder/yaml-cpp#[email protected]" )
CPMAddPackage(
NAME nlohmann_json
VERSION 3.9.1
GITHUB_REPOSITORY nlohmann/json
OPTIONS
"JSON_BuildTests OFF"
)
Boost 是一个很大的项目,需要一段时间才能下载。强烈建议使用CPM_SOURCE_CACHE
。克隆移动的数据比源存档多得多,因此此示例将使用 Boost 的 github 页面发布的压缩源存档 (tar.xz)。
# boost is a huge project and directly downloading the 'alternate release'
# from github is much faster than recursively cloning the repo.
CPMAddPackage(
NAME Boost
VERSION 1.84.0
URL https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.xz
URL_HASH SHA256 =2e64e5d79a738d0fa6fb546c6e5c2bd28f88d268a2a080546f74e5ff98f29d0e
OPTIONS "BOOST_ENABLE_CMAKE ON"
)
有关使用 CPM 下载和配置 Boost C++ 库的工作示例,请参阅此处。
# the install option has to be explicitly set to allow installation
CPMAddPackage(
GITHUB_REPOSITORY jarro2783/cxxopts
VERSION 2.2.1
OPTIONS "CXXOPTS_BUILD_EXAMPLES NO" "CXXOPTS_BUILD_TESTS NO" "CXXOPTS_ENABLE_INSTALL YES"
)
CPMAddPackage(
NAME benchmark
GITHUB_REPOSITORY google/benchmark
VERSION 1.5.2
OPTIONS "BENCHMARK_ENABLE_TESTING Off"
)
if (benchmark_ADDED)
# enable c++11 to avoid compilation errors
set_target_properties (benchmark PROPERTIES CXX_STANDARD 11)
endif ()
CPMAddPackage(
NAME lua
GIT_REPOSITORY https://github.com/lua/lua.git
VERSION 5.3.5
DOWNLOAD_ONLY YES
)
if (lua_ADDED)
# lua has no CMake support, so we create our own target
FILE ( GLOB lua_sources ${lua_SOURCE_DIR} /*.c)
list ( REMOVE_ITEM lua_sources " ${lua_SOURCE_DIR} /lua.c" " ${lua_SOURCE_DIR} /luac.c" )
add_library (lua STATIC ${lua_sources} )
target_include_directories (lua
PUBLIC
$< BUILD_INTERFACE : ${lua_SOURCE_DIR} >
)
endif ()
有关使用 CPM 通过 sol2 下载和配置 lua 的完整示例,请参阅此处。
请参阅示例目录以获取包含源代码的完整示例,并查看 wiki 以获取更多示例片段。
使用压缩源存档通常比浅克隆快得多。或者,您可以使用 SHA256 或类似方法验证完整性。设置哈希对于确保导入特定源非常有用,特别是因为标签、分支和档案可能会更改。
让我们看看将 spdlog 添加到项目中:
CPMAddPackage(
NAME spdlog
URL https://github.com/gabime/spdlog/archive/refs/tags/v1.12.0.zip
URL_HASH SHA256 =6174bf8885287422a6c6a0312eb8a30e8d22bcfcee7c48a6d02d1835d7769232
)
URL_HASH 是可选的,但对于发布来说这是一个好主意。
可在此处找到用于确定 URL 的信息。
并非每个软件包都提供版本,但对于提供版本的软件包,可以在项目的版本页面上找到它们。在浏览器中,特定版本的 URL 是通过右键单击并选择所需版本的Copy link address
(或类似内容)来确定的。这是您将在 URL 部分中使用的值。
这是 zip 格式的 spdlog 版本 1.13.0 的 URL: https://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip
://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip
分支的 URL 对于浏览器来说是不明显的。但弄清楚它仍然相当容易。格式如下:
https://github.com/
存档类型可以是tar.gz
或zip
之一。
spdlog 分支v2.x
的 URL 为: https://github.com/gabime/spdlog/archive/refs/heads/v2.x.tar.gz
标签类似,但格式如下:
https://github.com/
spdlog的标签v1.8.5
是这样的:
https://github.com/gabime/spdlog/archive/refs/tags/v1.8.5.tar.gz
和发布的一模一样。
如果特定提交包含您需要的代码,则其定义如下:
https://github.com/
示例:https: https://github.com/gabime/spdlog/archive/c1569a3d293a6b511ecb9c18b2298826c9578d9f.tar.gz
以下代码片段说明了如何使用wget
和sha256sum
在 Linux 计算机上确定 SHA256 哈希值:
wget https://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip -O - | sha256sum