klogg – schneller, erweiterter Protokoll-Explorer
JNGL – einfach zu verwendende plattformübergreifende 2D-Spielebibliothek
AALTITOAD – Verifizierer und Simulator für Tick Tock Automata
ZIMO-Elektronik
ada – WHATWG-konformer und schneller URL-Parser, geschrieben in modernem C++
Codon – Ein leistungsstarker, erweiterbarer Python-Compiler ohne Overhead, der LLVM verwendet
CRoaring – Roaring-Bitmaps in C (und C++) mit SIMD-Optimierungen (AVX2, AVX-512 und NEON): Wird von Apache Doris, ClickHouse und StarRocks verwendet
Diese Beispiele zeigen, wie man einige bekannte Projekte mit CPM einbinden kann. Weitere Ausschnitte finden Sie im 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 ist ein großes Projekt und der Download wird eine Weile dauern. Die Verwendung von CPM_SOURCE_CACHE
wird dringend empfohlen. Beim Klonen werden viel mehr Daten verschoben als bei einem Quellarchiv. In diesem Beispiel wird daher eine komprimierte Quellarchivversion (tar.xz) von der Github-Seite von Boost verwendet.
# 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"
)
Ein funktionierendes Beispiel für die Verwendung von CPM zum Herunterladen und Konfigurieren der Boost C++-Bibliotheken finden Sie hier.
# 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 ()
Ein vollständiges Beispiel für die Verwendung von CPM zum Herunterladen und Konfigurieren von Lua mit Sol2 finden Sie hier.
Vollständige Beispiele mit Quellcode finden Sie im Beispielverzeichnis. Viele weitere Beispielausschnitte finden Sie im Wiki.
Die Verwendung eines komprimierten Quellarchivs ist normalerweise viel schneller als ein flacher Klon. Optional können Sie die Integrität mithilfe von SHA256 oder ähnlichem überprüfen. Das Festlegen des Hash ist nützlich, um sicherzustellen, dass eine bestimmte Quelle importiert wird, insbesondere da sich Tags, Zweige und Archive ändern können.
Schauen wir uns das Hinzufügen von spdlog zu einem Projekt an:
CPMAddPackage(
NAME spdlog
URL https://github.com/gabime/spdlog/archive/refs/tags/v1.12.0.zip
URL_HASH SHA256 =6174bf8885287422a6c6a0312eb8a30e8d22bcfcee7c48a6d02d1835d7769232
)
URL_HASH ist optional, aber für Veröffentlichungen eine gute Idee.
Informationen zur Ermittlung der URL finden Sie hier.
Nicht jedes Softwarepaket bietet Releases, aber diejenigen, die über Releases verfügen, können diese auf der Release-Seite des Projekts finden. In einem Browser wird die URL der spezifischen Version bestimmt, indem man mit der rechten Maustaste klickt und Copy link address
“ (oder ähnliches) für die gewünschte Version auswählt. Dies ist der Wert, den Sie im URL-Abschnitt verwenden.
Dies ist die URL für SPDLOG-Version 1.13.0 im ZIP-Format: https://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip
Die URL für Zweige ist aus einem Browser nicht ersichtlich. Aber es ist immer noch ziemlich einfach, es herauszufinden. Das Format ist wie folgt:
https://github.com/
Der Archivtyp kann tar.gz
oder zip
sein.
Die URL für Branch v2.x
von spdlog lautet: https://github.com/gabime/spdlog/archive/refs/heads/v2.x.tar.gz
Tags sind ähnlich, aber mit diesem Format:
https://github.com/
Tag v1.8.5
von spdlog ist dieser:
https://github.com/gabime/spdlog/archive/refs/tags/v1.8.5.tar.gz
Genau wie die Veröffentlichung.
Wenn ein bestimmter Commit den von Ihnen benötigten Code enthält, ist er wie folgt definiert:
https://github.com/
Beispiel: https://github.com/gabime/spdlog/archive/c1569a3d293a6b511ecb9c18b2298826c9578d9f.tar.gz
Der folgende Ausschnitt veranschaulicht die Bestimmung des SHA256-Hashs auf einem Linux-Computer mithilfe von wget
und sha256sum
:
wget https://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip -O - | sha256sum