I\'m new to C++ and have been struggling with compiling/making/linking/building/whatever, lets see if somebody can help me out. I did some searches and found other people with
CMake add support for CXX_STANDARD
and CXX_STANDARD_REQUIRED
properties on 3.1 version.
CXX_STANDARD
: Take one of CMAKE_CXX_STANDARD
values and they are 98, 11 and 14
.
If you pass CXX_STANDARD 11
and you compiler do not support c++11
CXX_STANDARD
become 98 automatically and cmake do not give you any
error if CXX_STANDARD_REQUIRED
is OFF
or unset.
If your set CXX_STANDARD_REQUIRED "ON" CXX_STANDARD
specific value become as a required property to build and cmake handle this.
In orde to use CHECK_CXX_COMPILER_FLAG
you nedd to include CheckCXXCompilerFlag module:
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
if(COMPILER_SUPPORTS_CXX11)
message(STATUS "${COMPILER_SUPPORTS_CXX11}")
else(COMPILER_SUPPORTS_CXX11)
message(FATAL_ERROR "${COMPILER_SUPPORTS_CXX11}")
endif(COMPILER_SUPPORTS_CXX11)
If you have a old cmake you need handle complicate and not portable flags from compilers sush as:
function(suported_compilers)
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
execute_process(
COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
if(NOT(GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7))
message(FATAL_ERROR "${PROJECT_NAME} requires g++ 4.7 or greater.")
endif(NOT(GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7))
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
else()
message(FATAL_ERROR "Your compiler is supported in the build set?, please "
"contact the maintainer.")
endif()
endfunction(suported_compilers)
function(set_targets_compilers_flags target_list)
suported_compilers()
foreach(tg ${target_list})
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set_target_properties(${tg} PROPERTIES COMPILE_FLAGS "-g -std=c++14 -Wall -Wextra -Werror")
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set_target_properties(${tg} PROPERTIES COMPILE_FLAGS "/W4 /WX /EHsc")
endif()
endforeach()
endfunction(set_targets_compilers_flags)