klogg - explorador de log avançado e rápido
JNGL - biblioteca de jogos 2D multiplataforma fácil de usar
AALTITOAD - verificador e simulador para Tick Tock Automata
ZIMO-Eletrônica
ada - analisador de URL rápido e compatível com WHATWG escrito em C++ moderno
codon - Um compilador Python extensível, de alto desempenho e sem sobrecarga usando LLVM
CRoaring - Roaring bitmaps em C (e C++), com otimizações SIMD (AVX2, AVX-512 e NEON): usado por Apache Doris, ClickHouse e StarRocks
Estes exemplos demonstram como incluir alguns projetos bem conhecidos com CPM. Veja o wiki para mais trechos.
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 é um projeto grande e demorará um pouco para ser baixado. É altamente recomendável usar CPM_SOURCE_CACHE
. A clonagem move muito mais dados do que um arquivo de origem, portanto, este exemplo usará um arquivo de origem compactado (tar.xz) lançado na página do github do Boost.
# 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"
)
Para obter um exemplo prático de uso do CPM para baixar e configurar as bibliotecas Boost C++, veja aqui.
# 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 ()
Para obter um exemplo completo de como usar o CPM para baixar e configurar lua com sol2, veja aqui.
Consulte o diretório de exemplos para obter exemplos completos com código-fonte e confira o wiki para obter muitos outros trechos de exemplo.
Usar um arquivo de origem compactado geralmente é muito mais rápido que um clone superficial. Opcionalmente, você pode verificar a integridade usando SHA256 ou similar. Definir o hash é útil para garantir que uma fonte específica seja importada, especialmente porque tags, ramificações e arquivos podem mudar.
Vejamos como adicionar spdlog a um projeto:
CPMAddPackage(
NAME spdlog
URL https://github.com/gabime/spdlog/archive/refs/tags/v1.12.0.zip
URL_HASH SHA256 =6174bf8885287422a6c6a0312eb8a30e8d22bcfcee7c48a6d02d1835d7769232
)
URL_HASH é opcional, mas é uma boa ideia para lançamentos.
Informações para determinar o URL são encontradas aqui.
Nem todo pacote de software fornece lançamentos, mas aqueles que oferecem, eles podem ser encontrados na página de lançamento do projeto. Em um navegador, o URL da versão específica é determinado clicando com o botão direito e selecionando Copy link address
(ou similar) para a versão desejada. Este é o valor que você usará na seção URL.
Este é o URL do spdlog versão 1.13.0 em formato zip: https://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip
O URL das filiais não é óbvio em um navegador. Mas ainda é bastante fácil descobrir isso. O formato é o seguinte:
https://github.com/
O tipo de arquivo pode ser tar.gz
ou zip
.
O URL para branch v2.x
do spdlog é: https://github.com/gabime/spdlog/archive/refs/heads/v2.x.tar.gz
As tags são semelhantes, mas com este formato:
https://github.com/
A tag v1.8.5
do spdlog é esta:
https://github.com/gabime/spdlog/archive/refs/tags/v1.8.5.tar.gz
Exatamente como o lançamento.
Se um commit específico contiver o código que você precisa, ele será definido da seguinte forma:
https://github.com/
Exemplo: https://github.com/gabime/spdlog/archive/c1569a3d293a6b511ecb9c18b2298826c9578d9f.tar.gz
O trecho a seguir ilustra a determinação do hash SHA256 em uma máquina Linux usando wget
e sha256sum
:
wget https://github.com/gabime/spdlog/archive/refs/tags/v1.13.0.zip -O - | sha256sum