Awesome Open Source
Awesome Open Source

Modern C++ Continuous Integration

This project is illustrating this blog post.

License: MIT

Build status Systems / Compilers
CLang  / GCC / XCode Builds Linux (clang38 / gcc6) OSX (XCode 8.3 clang)
Visual Studio Builds Windows (Visual Studio 2017 / 2015)


This is an example of doing a Modern C++ project with CI.

It use basic C++14 syntax, but nothing really complicated.

This project try to follow C++ Core Guidelines whenever its possible.

CMake is the chosen build system using ctest.

libraries used

  • spdlog for a moderm log system. (as submodule)
  • catch as the test framework. (as submodule)

project structure

folder Content
/lib library
/lib/src library sources
/lib/include library includes
/lib/test library test
/app application
/app/src application sources
/app/test application test
/third_party third party software

Generate project

  cmake -H. -BBuild

Auto detect everything.

If you like to set a implicit compiler set the variable CXX=${COMPILER}, for example COMPILER could be gcc, clang and so on.

Auto detect in Windows usually generate a Visual Studio project since msbuild require it, but in OSX does not generate and XCode project, since is not required for compiling using XCode clang.

Specify build type debug/release

  # generate a debug project
  cmake -H. -BBuild -DCMAKE_BUILD_TYPE=Debug
  # generate a release project
  cmake -H. -BBuild -DCMAKE_BUILD_TYPE=Release

Specify architecture

  # 64 bits architecture
  cmake -H. -BBuild -Ax64
  # ARM architecture
  cmake -H. -BBuild -AARM
  # Windows 32 bits architecture
  cmake -H. -BBuild -AxWin32

Generate different project types

  # MinGW makefiles
  cmake -H. -BBuild -G "MinGW Makefiles"
  # XCode project
  cmake -H. -BBuild -G "XCode"
  # Visual Studio 15 2017 solution
  cmake -H. -BBuild -G "Visual Studio 15 2017"


From the Build folder

  # build the default build type (in multi build types usually debug)
  cmake --build .
  # build a specific build type
  cmake --build . --config Release

Run tests

From the Build folder

  # run all test using the default build type
  ctest -V
  # run all test in Release build type
  ctest -V -C Release


Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
C Plus Plus (367,724
Linux (16,223
Cpp (15,536
Windows (9,523
Macos (8,713
Cmake (8,181
Xcode (2,351
Ci (2,151
Visual Studio (1,943
Cpp17 (1,785
Unit Testing (1,689
Continuous Integration (1,576
Cpp14 (961
Unittest (946
Clang (576
Gcc (530
Modern Cpp (265
Related Projects