All Projects → joshpeterson → cpp-template

joshpeterson / cpp-template

Licence: other
A template C++ repository, using CMake and Catch

Programming Languages

python
139335 projects - #7 most used programming language
shell
77523 projects
CMake
9771 projects
Batchfile
5799 projects
C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to cpp-template

dynamic bitset
Simple Useful Libraries: C++17/20 header-only dynamic bitset
Stars: ✭ 90 (+83.67%)
Mutual labels:  catch2
CDT-plusplus
Causal Dynamical Triangulations in C++ using CGAL
Stars: ✭ 49 (+0%)
Mutual labels:  catch2
foxy
Session-based Beast/Asio wrapper requiring C++14
Stars: ✭ 61 (+24.49%)
Mutual labels:  catch2
mockcpp
Two C/C++ testing tools, mockcpp and testngpp.
Stars: ✭ 40 (-18.37%)
Mutual labels:  catch2
qt raytracer challenge
Implementation based on the book The Ray Tracer Challenge
Stars: ✭ 18 (-63.27%)
Mutual labels:  catch2
pamplejuce
A JUCE Plugin CI template. JUCE 7 & Catch2 with macOS notarization and Windows EV code signing on Github Actions
Stars: ✭ 115 (+134.69%)
Mutual labels:  catch2

C++ Project Template

Build Status

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.

Quick start

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.

Manual installation

These are the step the python script above performs. You can do them manually as well:

  1. Clone or download the source code.
  2. Remove the .git/ directory, if is exists.
  3. Search the project for "cpp-template" and replace it with the name of your project.
  4. Replace this README.md file with one for your project.

Building

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 artifacts.

Project structure

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). The main.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 from src 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.

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/format script can be used locally to update code formatting to match the style in the .clang-format file. The tools/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.

License

This project is available in the public domain.

Acknowledgements

The project is based on the Hello CMake project from Arne Mertz.

It uses the sanitizers-cmake for CMake integration of clang's sanitizers.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].