Build status | Systems / Compilers |
---|---|
Linux (clang / gcc) OSX (XCode clang) | |
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.
Simply copy/paste the folder (without the .git folder) and run the .bat file (renaming to .sh should work for linux). This will create an initial git commit and add the required submodules.
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 |
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
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
- https://cmake.org/
- https://docs.travis-ci.com/user/languages/cpp/
- https://www.appveyor.com/docs/lang/cpp/
- https://github.com/isocpp/CppCoreGuidelines
- https://github.com/catchorg/Catch2
- https://github.com/gabime/spdlog
- https://www.appveyor.com/docs/lang/cpp/
- https://docs.travis-ci.com/user/languages/cpp/