USE CMAKE TO SIMPLIFY THE BUILD

  • Does not build the code, generates files to feed into a build system
  • Very powerful, still build receipt is readable
  • The library creation and linking can be rewritten as follows:
add_library(tools tools.cpp)
add_executable(main main.cpp)
target_link_libraries(main tools)
  • CMakeLists.txt defines the whole build
  • CMake reads CMakeLists.txt sequentially

CMAKELISTS.TXT

project( first_project ) # Mandatory.
cmake_minimum_required(VERSION 3.1) # Mandatory.
set( CMAKE_CXX_STANDARD 11) # Use c++11.
# tell cmake to output binaries here:
set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# tell cmake where to look for *.h files
include_directories(${PROJECT_SOURCE_DIR}/src)
# create library "libtools"
add_library(tools src/tools.cpp)
# add executable main
add_executable(main src/ tools_main .cpp)
# tell the linker to bind these objects together
target_link_libraries(main tools)

SET COMPILATION OPTIONS IN CMAKE

set ( CMAKE_CXX_STANDARD 14)
# Set build type if not set.
if(NOT CMAKE_BUILD_TYPE )
set( CMAKE_BUILD_TYPE Release)
endif ()
# Set additional flags.
set( CMAKE_CXX_FLAGS "-Wall -Wextra ")
set( CMAKE_CXX_FLAGS_DEBUG "-g -O0")
set( CMAKE_CXX_FLAGS_RELEASE "-O3")