A C++ package manager based on CMake and Git that enables linking multiple versions of static libraries without symbol conflicts.
CPM is a C++ package manager that simplifies dependency management by automating the download, building, and linking of C++ modules using CMake and Git. It solves the problem of symbol conflicts when statically linking multiple versions of the same library, enabling developers to use modules with different dependency requirements in a single project.
C++ developers working on projects with complex dependencies, especially those needing to integrate multiple versions of static libraries or manage modular C++ components.
Developers choose CPM for its seamless CMake integration, ability to handle version conflicts through namespace isolation, and automated dependency resolution without requiring additional tools beyond Git.
C++ Package Manager
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Enables static linking of different versions of the same library without symbol conflicts, allowing modules with varying dependencies to coexist, as highlighted in the key features.
Automatically downloads and builds C++ modules from Git repositories, reducing manual setup and configuration steps described in the README.
Built entirely in CMake, requiring no additional tools beyond Git, and integrates directly into CMakeLists.txt files, making it seamless for CMake-based projects.
Generates unique preprocessor namespace definitions for each module (e.g., CPM_AABB_NS) to prevent naming collisions and support version isolation, as detailed in the usage section.
The README explicitly states CPM is not being actively maintained, with no plans for code modifications, posing significant risks for bug fixes and compatibility with newer CMake versions.
Only supports Git with very limited SVN, making it unsuitable for projects using other systems like Mercurial, as noted in the limitations section.
Requires copying a substantial block of CMake code into each project's CMakeLists.txt, which can be cumbersome and error-prone for simple dependency needs.
External modules do not support multi-version linking because they aren't built as CPM modules, limiting a key feature for popular libraries like Google Test, as admitted in the README.