CPM
CPM is a simple GIT dependency manager written in CMake. The main use-case is abstracting CMake's FetchContent and managing dependencies in small to medium sized projects.
Supported projects
Any project that you can add via add_subdirectory should already work with CPM.
Usage
To add a new dependency to your project simply add the Projects target name, the git URL and the version. If the git tag for this version does not match the pattern v$VERSION, then the exact branch or tag can be specified with the GIT_TAG argument. CMake options can also be supplied with the package.
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
# create project
project(MyProject)
# add dependencies
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPM.cmake)
CPMAddPackage(
NAME LarsParser
VERSION 1.8
GIT_REPOSITORY https://github.com/TheLartians/Parser.git
GIT_TAG v1.8 # optional here, as indirectly defined by VERSION
OPTIONS # optional CMake arguments passed to the dependency
"LARS_PARSER_BUILD_GLUE_EXTENSION ON"
)
# add executable
set (CMAKE_CXX_STANDARD 17)
add_executable(my-project my-project.cpp)
target_link_libraries(my-project LarsParser)
See the examples directory for more examples.
Adding CPM
To add CPM to your current project, simply include add cmake/CPM.cmake to your projects cmake directory. The command below will perform this automatically.
wget -O cmake/CPM.cmake https://raw.githubusercontent.com/TheLartians/CPM/master/cmake/CPM.cmake
Options
If you set the CMake option CPM_REMOTE_PACKAGES_ONLY to On, packages will always be fetched via the URL. Setting CPM_LOCAL_PACKAGES_ONLY to On will only add packages via find_package.
Advantages
- Small repos CPM takes care of project dependencies, allowing you to focus on creating small, well-tested frameworks.
- Cross-Plattform CPM adds projects via
add_subdirectory, which is compatible with all cmake toolchains and generators. - Reproducable builds By using versioning via git tags it is ensured that a project will always be in the same state everywhere.
- No installation required No need to install anything. Just add the script to your project and you're good to go.
- No Setup required There is a good chance your existing projects already work as CPM dependencies.
Limitations
- First version used In diamond-shaped dependency graphs (e.g.
Adepends onC(v1.1) andAdepends onBdepends onC(v1.2)) the first added dependency will be used (in this caseC@1.1). If the current version is older than the version beeing added, or if provided options are incompatible, a CMake warning will be emitted. - No auto-update To update a dependency, version numbers or git tags in the cmake scripts must be adapted manually.