This is a boiler plate for C++ projects. What you get:
- Sources, headers and mains separated in distinct folders
- Access to Google Tests
- Use of CMake for much easier compiling
- Continuous testing with Travis-CI, with support for C++17.
- Code coverage reports, including automatic upload to Coveralls.io
- Code documentation with Doxygen
.
├── 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.x
by default).
If you add a new executable, say app/hello.cpp
, you only need to add the following three lines to CMakeLists.txt:
add_executable(hello.x app/hello.cpp) # Name of exec. and location of file.
add_dependencies(hello.x engine) # engine is the library built from src/*.cpp
target_link_libraries(hello.x engine) # Link the executable to the 'engine'.
You can find the example that builds the example 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.
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.x
$ make gtest # Makes and runs the tests.
$ make coverage # Generate a coverage report.
$ make doc # Generate html documentation.
The .gitignore file is a copy of the Github C++.gitignore file,
with the addition of ignoring the build directory (build/
).
If repository is activated with Travis-CI, then unit tests will be built and executed on each commit.
If repository is activated with Coveralls, then deployment to Travis will also calculate code coverage and upload this to Coveralls.io.
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
$ sh setup.sh
The result is a fresh Git repository with one commit adding all files from the boiler plate.