This is an example of doing a Modern C++ project with CI
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
third_party updating for the blog post Jul 2, 2017
.gitignore adding .vs to ignore Jun 18, 2017
.gitmodules adding spdlog as submodule Jul 1, 2017
LICENSE updating for the blog post Jul 2, 2017
appveyor.yml updating for the blog post Jul 2, 2017

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