# Set a default build type if none was specified # Override the default by specifying default_build_type if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) if( NOT default_build_type ) set( default_build_type "RelWithDebInfo" ) endif() message( STATUS "Setting build type to '${default_build_type}' as none was specified.") set(CMAKE_BUILD_TYPE ${default_build_type} CACHE STRING "Choose the type of build." FORCE) # Set the possible values of build type for cmake-gui, ccmake set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") else() message( STATUS "Current CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" ) endif() if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) SET(CMAKE_INSTALL_PREFIX "/usr/" CACHE PATH "Common prefix for all installed files." FORCE) endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) find_program(CCACHE ccache) if(CCACHE) message("using ccache") set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE}) else() # message("ccache not found cannot use") endif() # Generate compile_commands.json to make it easier to work with clang based # tools set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(ENABLE_IPO "Enable Iterprocedural Optimization, aka Link Time Optimization (LTO)" OFF) if(ENABLE_IPO) include(CheckIPOSupported) check_ipo_supported(RESULT result OUTPUT output) if(result) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) else() message(SEND_ERROR "IPO is not supported: ${output}") endif() endif() if(MSVC) option(MSVC_STATIC_CRT "Statically link MSVC CRT" OFF) if(MSVC_STATIC_CRT) message(STATUS "Using static MSVC CRT") # http://stackoverflow.com/a/32128977/486990 add_compile_options( "$<$:/MTd>" "$<$:/MT>" "$<$:/MT>" "$<$:/MT>" ) foreach(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) if(${flag_var} MATCHES "/MD") string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") endif(${flag_var} MATCHES "/MD") if(${flag_var} MATCHES "/W3") string(REGEX REPLACE "/W3" "/W4" ${flag_var} "${${flag_var}}") endif(${flag_var} MATCHES "/W3") endforeach(flag_var) else() # Turn off a duplicate LIBCMT linker warning set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libcmt.lib") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:libcmt.lib") endif() endif()