GithubHelp home page GithubHelp logo

5l1v3r1 / cpp-project Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bsamseth/cpp-project

0.0 1.0 0.0 126 KB

Boiler plate template for C++ projects, with CMake, Doctest, Travis CI, Appveyor, Github Actions and coverage reports.

License: The Unlicense

CMake 90.86% C++ 6.86% Shell 2.28%

cpp-project's Introduction

Project Status: Active – The project has reached a stable, usable state and is being actively developed. Build Status Build status Coverage Status codecov Codacy Badge Language grade: C/C++ Total alerts license Lines of Code. Average time to resolve an issue Percentage of issues still open

Boiler plate for C++ projects

This is a boiler plate for C++ projects. What you get:

  • Sources, headers and mains separated in distinct folders
  • Use of modern CMake for much easier compiling
  • Setup for tests using doctest
  • Continuous testing with Travis-CI and Appveyor, with support for C++17.
  • Code coverage reports, including automatic upload to Coveralls.io and/or Codecov.io
  • Code documentation with Doxygen

Demo of usage

Structure

.
├── CMakeLists.txt
├── app
│   └── main.cpp
├── include
│   ├── example.h
│   └── exampleConfig.h.in
├── src
│   └── example.cpp
└── tests
    ├── dummy.cpp
    └── main.cpp

Sources go in src/, header files in include/, main programs in app/, and tests go in tests/ (compiled to unit_tests by default).

If you add a new executable, say app/hello.cpp, you only need to add the following two lines to CMakeLists.txt:

add_executable(main app/main.cpp)   # Name of exec. and location of file.
target_link_libraries(main PRIVATE ${LIBRARY_NAME})  # Link the executable to lib built from src/*.cpp (if it uses it).

You can find the example source code that builds the main executable in app/main.cpp under the Build section in CMakeLists.txt. If the executable you made does not use the library in src/, then only the first line is needed.

Building

Build by making a build directory (i.e. build/), run cmake in that dir, and then use make to build the desired target.

Example:

> mkdir build && cd build
> cmake .. -DCMAKE_BUILD_TYPE=[Debug | Coverage | Release]
> make
> ./main
> make test      # Makes and runs the tests.
> make coverage  # Generate a coverage report.
> make doc       # Generate html documentation.

.gitignore

The .gitignore file is a copy of the Github C++.gitignore file, with the addition of ignoring the build directory (build/).

Services

If the repository is activated with Travis-CI, then unit tests will be built and executed on each commit. The same is true if the repository is activated with Appveyor.

If the repository is activated with Coveralls/Codecov, then deployment to Travis will also calculate code coverage and upload this to Coveralls.io and/or Codecov.io

Setup

When starting a new project, you probably don't want the history of this repository. To start fresh you can use the setup script as follows:

> git clone --recurse-submodules https://github.com/bsamseth/cpp-project  # Or use ssh-link if you like.
> cd cpp-project
> bash setup.sh

The result is a fresh Git repository with one commit adding all files from the boiler plate.

cpp-project's People

Contributors

bsamseth avatar henryrlee avatar kalenanson avatar

Watchers

 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.