Code Monkey home page Code Monkey logo

modern-cpp-template's Introduction

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, Code of Conduct, Contributing Guideliness, Issues and Pull Requests,
  • Permissive license to allow you to integrate it as easily as possible. The template is licensed under the Boost Software License,
  • Options to build as a header-only library or executable, not just a static or shared library.
  • CCache integration, for speeding up build 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.

You will also need to rename the cmake/Config.cmake.in file to start with the exact name of your project. Such as cmake/MyNewProjectConfig.cmake.in.

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
)

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.

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 desired 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. Please read the Code of Conduct as well, before engaging with the project's community.

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 Boost Software License - see the LICENSE file for details

modern-cpp-template's People

Contributors

filipdutescu avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.