A template for modern C++ projects using CMake, CI, code coverage, clang-format, and reproducible dependency management.
ModernCppStarter is a template repository that provides a ready-to-use foundation for modern C++ projects. It solves the problem of time-consuming project setup by including pre-configured CMake, continuous integration, code coverage, formatting, and dependency management. The template is designed to follow best practices and reduce boilerplate, allowing developers to focus on writing code rather than infrastructure.
C++ developers and teams starting new projects who want to adopt modern development practices quickly. It's especially useful for those building libraries or applications with tests, CI/CD, and code quality tooling.
Developers choose ModernCppStarter because it bundles proven tools and configurations into a single template, saving hours of setup time. Its modular design, emphasis on clean CMake practices, and integration with popular tools like clang-format and Doxygen make it a comprehensive and practical starting point.
🚀 Kick-start your C++! A template for modern C++ projects using CMake, CI, code coverage, clang-format, reproducible dependency management and much more.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Pre-configured GitHub Actions workflows for multiple OSes and code coverage via codecov enable immediate continuous integration and testing, reducing setup overhead.
Follows contemporary CMake conventions suitable for any project scale, ensuring clean separation of library and executable code for maintainability.
Enforces formatting with clang-format and cmake-format via Format.cmake, and integrates sanitizers and static analyzers like clang-tidy for consistent code standards.
Uses CPM.cmake to handle dependencies, providing consistent builds across environments, with options for users to opt-out if needed.
The README explicitly states that CPack configuration is not included, leaving users to manually set up installers for distribution, which adds extra work.
Relies on CPM.cmake, which might cause integration issues for teams using other package managers like vcpkg, despite opt-out mechanisms requiring additional configuration.
Requires manual renaming of project references and directories, which can be error-prone and time-consuming, especially for those less familiar with CMake.