cmake will not compile to C++ 11 standard

前端 未结 4 1464
面向向阳花
面向向阳花 2021-02-03 12:26

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

4条回答
  •  盖世英雄少女心
    2021-02-03 12:58

    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)
    

提交回复
热议问题