Coder Social home page Coder Social logo

tractatus / 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 175 KB

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

License: The Unlicense

CMake 90.88% C++ 6.85% 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:

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

Using the GitHub template

Click the Use this template button to make a new repository from this template.

NB: GitHub templates do not carry over submodules, which means you need to add those back before you can build the project. Run the following after you have generated your new project:

> git clone https://github.com/<your-username>/<your-repo-name>
> git submodule add https://github.com/onqtam/doctest.git external/doctest
> git commit -a --amend --no-edit
> git push --force

From command line

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

aprotyas avatar bsamseth avatar dilshodm avatar gmargari avatar henryrlee avatar kalenanson avatar sergeyklay 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.