klogg — быстрый расширенный обозреватель журналов
JNGL — простая в использовании кроссплатформенная библиотека 2D-игр.
AALTITOAD - верификатор и симулятор для автоматов Tick Tock
ЗИМО-Электроник
ada — совместимый с WHATWG и быстрый анализатор URL-адресов, написанный на современном C++.
codon — высокопроизводительный расширяемый компилятор Python с нулевыми издержками, использующий LLVM.
CRoaring — растровые изображения Roaring на C (и C++) с оптимизацией SIMD (AVX2, AVX-512 и NEON): используется Apache Doris, ClickHouse и StarRocks.
Эти примеры демонстрируют, как включить в CPM некоторые известные проекты. Дополнительные фрагменты см. в вики.
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
. При клонировании перемещается гораздо больше данных, чем в исходном архиве, поэтому в этом примере будет использоваться версия сжатого исходного архива (tar.xz) со страницы Boost на GitHub.
# 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 для загрузки и настройки lua с sol2 см. здесь.
В каталоге примеров вы найдете полные примеры с исходным кодом, а в вики — множество других фрагментов примеров.
Использование сжатого исходного архива обычно происходит намного быстрее, чем использование поверхностного клона. При желании вы можете проверить целостность с помощью 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.
Это URL-адрес версии spdlog 1.13.0 в формате zip: https://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip
URL-адрес ветвей неочевиден из браузера. Но разобраться в этом все равно довольно легко. Формат следующий:
https://github.com/
Тип архива может быть tar.gz
или zip
.
URL-адрес ветки spdlog v2.x
: https://github.com/gabime/spdlog/archive/refs/heads/v2.x.tar.gz
Теги аналогичны, но в таком формате:
https://github.com/
Тег v1.8.5
spdlog таков:
https://github.com/gabime/spdlog/archive/refs/tags/v1.8.5.tar.gz
Точно так же, как и релиз.
Если конкретный коммит содержит нужный вам код, он определяется следующим образом:
https://github.com/
Пример: https://github.com/gabime/spdlog/archive/c1569a3d293a6b511ecb9c18b2298826c9578d9f.tar.gz
Следующий фрагмент иллюстрирует определение хеша SHA256 на компьютере с Linux с помощью wget
и sha256sum
:
wget https://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip -O - | sha256sum