All Projects → filipdutescu → Modern Cpp Template

filipdutescu / Modern Cpp Template

Licence: unlicense
A template for modern C++ projects using CMake, Clang-Format, CI, unit testing and more, with support for downstream inclusion.

Programming Languages

cpp
1120 projects

Projects that are alternatives of or similar to Modern Cpp Template

Moderncppstarter
🚀 Kick-start your C++! A template for modern C++ projects using CMake, CI, code coverage, clang-format, reproducible dependency management and much more.
Stars: ✭ 2,381 (+245.07%)
Mutual labels:  cmake, open-source, ci, continuous-integration, codecov, template
Cpp Project
Boiler plate template for C++ projects, with CMake, Doctest, Travis CI, Appveyor, Github Actions and coverage reports.
Stars: ✭ 328 (-52.46%)
Mutual labels:  cmake, project-template, code-coverage, codecov
cpp14-project-template
A simple, cross-platform, and continuously integrated C++14 project template
Stars: ✭ 64 (-90.72%)
Mutual labels:  continuous-integration, project-template, codecov, code-coverage
Setup Php
GitHub action to set up PHP with extensions, php.ini configuration, coverage drivers, and various tools.
Stars: ✭ 1,945 (+181.88%)
Mutual labels:  static-analysis, continuous-integration, code-coverage
Moderncppci
This is an example of doing a Modern C++ project with CI
Stars: ✭ 109 (-84.2%)
Mutual labels:  cmake, ci, continuous-integration
qodana-action
⚙️ Scan your Java, Kotlin, PHP, Python, JavaScript, TypeScript projects at GitHub with Qodana
Stars: ✭ 112 (-83.77%)
Mutual labels:  continuous-integration, ci, static-analysis
Cleancppproject
Clean C++ project for you to use. Features: Modern CMake, CPack, Doxygen, PlantUML, Catch Unit testing, static analysis
Stars: ✭ 276 (-60%)
Mutual labels:  cmake, static-analysis, project-template
Huskyci
Performing security tests inside your CI
Stars: ✭ 398 (-42.32%)
Mutual labels:  static-analysis, continuous-integration
Gitlab Ci Pipeline Php
☕️ Docker images for test PHP applications with Gitlab CI (or any other CI platform!)
Stars: ✭ 451 (-34.64%)
Mutual labels:  ci, continuous-integration
Bzppx Codepub
暴走皮皮虾之代码发布系统,是现代的持续集成发布系统,由后台管理系统和agent两部分组成,一个运行着的agent就是一个节点,本系统并不是造轮子,是"鸟枪"到"大炮"的创新,对"前朝遗老"的革命.
Stars: ✭ 471 (-31.74%)
Mutual labels:  ci, continuous-integration
Conan
Conan - The open-source C/C++ package manager
Stars: ✭ 5,498 (+696.81%)
Mutual labels:  cmake, package-manager
Mumble
Mumble is an open-source, low-latency, high quality voice chat software.
Stars: ✭ 4,418 (+540.29%)
Mutual labels:  cmake, open-source
Cmake Conan
CMake wrapper for conan C and C++ package manager
Stars: ✭ 374 (-45.8%)
Mutual labels:  cmake, package-manager
Xcov
Nice code coverage reporting without hassle
Stars: ✭ 467 (-32.32%)
Mutual labels:  ci, continuous-integration
Cget
C++ package retrieval
Stars: ✭ 370 (-46.38%)
Mutual labels:  cmake, package-manager
Cmake Examples
Useful CMake Examples
Stars: ✭ 7,220 (+946.38%)
Mutual labels:  cmake, static-analysis
Xcpretty
Flexible and fast xcodebuild formatter
Stars: ✭ 3,686 (+434.2%)
Mutual labels:  ci, continuous-integration
Buildbot
Python-based continuous integration testing framework; your pull requests are more than welcome!
Stars: ✭ 4,735 (+586.23%)
Mutual labels:  ci, continuous-integration
Drone
Drone is a Container-Native, Continuous Delivery Platform
Stars: ✭ 24,287 (+3419.86%)
Mutual labels:  ci, continuous-integration
Php Censor
PHP Censor is an open source self-hosted continuous integration server for PHP projects.
Stars: ✭ 619 (-10.29%)
Mutual labels:  ci, continuous-integration

Actions Status Actions Status Actions Status codecov GitHub release (latest by date)

Modern C++ Template

A quick C++ template for modern CMake projects, aimed to be an easy to use starting point.

This is my personal take on such a type of template, thus I might not use the best practices or you might disagree with how I do things. Any and all feedback is greatly appreciated!

Features

  • Modern CMake configuration and project, which, to the best of my knowledge, uses the best practices,

  • An example of a Clang-Format config, inspired from the base Google model, with minor tweaks. This is aimed only as a starting point, as coding style is a subjective matter, everyone is free to either delete it (for the LLVM default) or supply their own alternative,

  • Static analyzers integration, with Clang-Tidy and Cppcheck, the former being the default option,

  • Doxygen support, through the ENABLE_DOXYGEN option, which you can enable if you wish to use it,

  • Unit testing support, through GoogleTest (with an option to enable GoogleMock) or Catch2,

  • Code coverage, enabled by using the ENABLE_CODE_COVERAGE option, through Codecov CI integration,

  • Package manager support, with Conan and Vcpkg, through their respective options

  • CI workflows for Windows, Linux and MacOS using GitHub Actions, making use of the caching features, to ensure minimum run time,

  • .md templates for: README, Contributing Guideliness, Issues and Pull Requests,

  • Permissive license to allow you to integrate it as easily as possible. The template is licensed under the Unlicense,

  • Options to build as a header-only library or executable, not just a static or shared library.

  • Ccache integration, for speeding up rebuild times

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

This project is meant to be only a template, thus versions of the software used can be change to better suit the needs of the developer(s). If you wish to use the template as-is, meaning using the versions recommended here, then you will need:

  • CMake v3.15+ - found at https://cmake.org/

  • C++ Compiler - needs to support at least the C++17 standard, i.e. MSVC, GCC, Clang

Note: You also need to be able to provide CMake a supported generator.

Installing

It is fairly easy to install the project, all you need to do is clone if from GitHub or generate a new repository from it (also on GitHub).

If you wish to clone the repository, rather than generate from it, you simply need to run:

git clone https://github.com/filipdutescu/modern-cpp-template/

After finishing getting a copy of the project, with any of the methods above, create a new folder in the include/ folder, with the name of your project. Edit cmake/SourcesAndHeaders.cmake to add your files.

You will also need to rename the cmake/ProjectConfig.cmake.in file to start with the exact name of your project. Such as cmake/MyNewProjectConfig.cmake.in. You should also make the same changes in the GitHub workflows provided, notably .github/workflows/ubuntu.yml, in which you should replace the CMake option -DProject_ENABLE_CODE_COVERAGE=1 to -DMyNewProject_ENABLE_CODE_COVERAGE=1.

Finally, change "Project" from CMakeLists.txt, from

project(
  "Project"
  VERSION 0.1.0
  LANGUAGES CXX
)

to the exact name of your project, i.e. using the previous name it will become:

project(
  MyNewProject
  VERSION 0.1.0
  LANGUAGES CXX
)

To install an already built project, you need to run the install target with CMake. For example:

cmake --build build --target install --config Release

# a more general syntax for that command is:
cmake --build <build_directory> --target install --config <desired_config>

Building the project

To build the project, all you need to do, ***after correctly installing the project***, is run a similar CMake routine to the the one below:

mkdir build/ && cd build/
cmake .. -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory
cmake --build . --target install

Note: The custom CMAKE_INSTALL_PREFIX can be omitted if you wish to install in the default install location.

More options that you can set for the project can be found in the cmake/StandardSettings.cmake file. For certain options additional configuration may be needed in their respective *.cmake files (i.e. Conan needs the CONAN_REQUIRES and might need the CONAN_OPTIONS to be setup for it work correctly; the two are set in the cmake/Conan.cmake file).

Generating the documentation

In order to generate documentation for the project, you need to configure the build to use Doxygen. This is easily done, by modifying the workflow shown above as follows:

mkdir build/ && cd build/
cmake .. -D<project_name>_ENABLE_DOXYGEN=1 -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory
cmake --build . --target doxygen-docs

Note: This will generate a docs/ directory in the project's root directory.

Running the tests

By default, the template uses Google Test for unit testing. Unit testing can be disabled in the options, by setting the ENABLE_UNIT_TESTING (from cmake/StandardSettings.cmake) to be false. To run the tests, simply use CTest, from the build directory, passing the desire configuration for which to run tests for. An example of this procedure is:

cd build          # if not in the build directory already
ctest -C Release  # or `ctest -C Debug` or any other configuration you wish to test

# you can also run tests with the `-VV` flag for a more verbose output (i.e.
#GoogleTest output as well)

End to end tests

If applicable, should be presented here.

Coding style tests

If applicable, should be presented here.

Contributing

Please read CONTRIBUTING.md for details on our how you can become a contributor and the process for submitting pull requests to us.

Versioning

This project makes use of SemVer for versioning. A list of existing versions can be found in the project's releases.

Authors

License

This project is licensed under the Unlicense - see the LICENSE file for details

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].