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, Appveyor and GitHub Actions, with support for C++17.
- Code coverage reports, including automatic upload to Coveralls.io and/or Codecov.io
- Code documentation with Doxygen
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.
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 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.