/ModernCppCI

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

Primary LanguageC++MIT LicenseMIT

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)

info

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"

Build

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

references