This is a template project for C++. It uses CMake to build and Catch for unit tests. It is integrated with Travis CI, and builds on Windows, macOS, and Linux. It consists of one static library, one main function, and one test executable.
I like to use this project as a starting point for C++ projects. It has builds, tests, code formatting, static and dynamic analysis, and CI integration set up and ready to go.
The cpp-template-installer.py script can be used to quickly create a project (you'll need to have python installed):
> curl https://raw.githubusercontent.com/joshpeterson/cpp-template/master/cpp-template-installer.py | python - <my project name>
Just replace <my project name>
with the name of your project.
These are the step the python script above performs. You can do them manually as well:
- Clone or download the source code.
- Remove the
.git/
directory, if is exists. - Search the project for "cpp-template" and replace it with the name of your project.
- Replace this README.md file with one for your project.
On Linux, you will need a C++ compiler installed, then run:
> sudo apt install cmake ninja-build
> git clone git@github.com:joshpeterson/cpp-template.git
> ./build
On macOS, you will need to have Xcode installed, then run:
> brew install cmake ninja
> git clone git@github.com:joshpeterson/cpp-template.git
> ./build
On Windows, you will need have Visual Studio installed with C++ tools, then run:
> git clone git@github.com:joshpeterson/cpp-template.git
> build
The build output should live in a directory named artifacts
.
The project has the following top-level directories:
- The
src
directory is the location of all of the project's source code (header files and source files). Themain.cpp
file is built into the final executable, all other source files in this directory are built into a static library. Only code in this static library will be tested. - The
test
directory contains the unit tests. The unit test executable links with the static library built fromsrc
directory. - The
thirdparty
directory contains external code used by this project, namely, Catch and the CMake sanitizer integration. - The
tools
directory contains a number of scripts used for building and other tool integration with the project.
The project integrates with a few other tools to aid in development.
- The clang-format utility is used to enforce common source code formatting. The
tools/format
script can be used locally to update code formatting to match the style in the.clang-format
file. Thetools/run-clang-format.py
script is used on Travis CI to check formatting. - The clang-tidy utility is used to run static analysis on the source code. The
tools/tidy
script can be used locally and on Travis CI to run clang-tidy. - The clang address, thread, and undefined behavior sanitizers are run on the unit
tests. The
tools/sanitize
script can be used to run them locally.
These tooling scripts are configured to run on Linux.
This project is available in the public domain.
The project is based on the Hello CMake project from Arne Mertz.
It uses the sanitizers-cmake for CMake integration of clang's sanitizers.