1include(Compiler/GNU) 2__compiler_gnu(CXX) 3 4 5if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER) 6 AND CMAKE_GENERATOR MATCHES "Makefiles|WMake" 7 AND CMAKE_DEPFILE_FLAGS_CXX) 8 # dependencies are computed by the compiler itself 9 set(CMAKE_CXX_DEPFILE_FORMAT gcc) 10 set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE) 11endif() 12 13set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++) 14 15if (WIN32) 16 if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.6) 17 set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fno-keep-inline-dllexport") 18 endif() 19else() 20 if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) 21 set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden") 22 endif() 23endif() 24 25if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4) 26 set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98") 27 set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98") 28endif() 29 30if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7) 31 set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON) 32 set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11") 33 set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11") 34elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4) 35 # 4.3 supports 0x variants 36 set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x") 37 set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x") 38endif() 39 40if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.1) 41 set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON) 42endif() 43 44if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) 45 set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14") 46 set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14") 47elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8) 48 set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y") 49 set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y") 50endif() 51 52if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) 53 set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON) 54endif() 55 56if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0) 57 set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17") 58 set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17") 59elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1) 60 set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z") 61 set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z") 62endif() 63 64if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11.1) 65 set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20") 66 set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20") 67 set(CMAKE_CXX23_STANDARD_COMPILE_OPTION "-std=c++23") 68 set(CMAKE_CXX23_EXTENSION_COMPILE_OPTION "-std=gnu++23") 69elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) 70 set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a") 71 set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a") 72endif() 73 74__compiler_check_default_language_standard(CXX 3.4 98 6.0 14 11.1 17) 75