C++ Project Template
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.
How to use this project
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 -
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 [email protected]:joshpeterson/cpp-template.git > ./build
On macOS, you will need to have Xcode installed, then run:
> brew install cmake ninja > git clone [email protected]:joshpeterson/cpp-template.git > ./build
On Windows, you will need have Visual Studio installed with C++ tools, then run:
> git clone [email protected]:joshpeterson/cpp-template.git > build
The build output should live in a directory named
The project has the following top-level directories:
srcdirectory is the location of all of the project's source code (header files and source files). The
main.cppfile 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.
testdirectory contains the unit tests. The unit test executable links with the static library built from
thirdpartydirectory contains external code used by this project, namely, Catch and the CMake sanitizer integration.
toolsdirectory contains a number of scripts used for building and other tool integration with the project.
Other tool integration
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/formatscript can be used locally to update code formatting to match the style in the
tools/run-clang-format.pyscript is used on Travis CI to check formatting.
- The clang-tidy utility is used to run static analysis on the source code. The
tools/tidyscript 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/sanitizescript 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.