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 and/or Codecov.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 the repository is activated with Travis-CI, then unit tests will be built and executed on each commit.
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
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.