例
-
cmake/flags.c++.std.cmake
などに保存しておき、include
して使う:
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
if( CMAKE_CXX_COMPILER_VERION VERSION_GREATER 3.5 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 3.5 )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z" )
elseif( CMAKE_CXX_COMPILER_VERION VERSION_GREATER 3.2 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 3.2 )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y" )
else()
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
endif()
elseif( CMAKE_COMPILER_IS_GNUCXX )
if( CMAKE_CXX_COMPILER_VERION VERSION_GREATER 5.1 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 5.1 )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14" )
elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.8)
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y" )
elseif( CMAKE_CXX_COMPILER_VERION VERSION_GREATER 4.7 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.7 )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
elseif( CMAKE_CXX_COMPILER_VERION VERSION_GREATER 4.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.3 )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x" )
else()
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03" )
endif()
endif()
効果
例えばコンパイラーとして clang++-3.7
が与えられた場合には -std=c++1z
、 g++-4.9.2
が与えられた場合には -std=c++1y
など、コンパイラーに応じた使用可能な最新の -std
規格が翻訳オプションとして与えられる。
主な用途
- ソースコード側が最新の言語規格まで対応しているライブラリーについて、与えられたコンパイラーの対応規格レベルに応じて
-std
オプションを切り替えたい場合。
Reference
だそく
- MSVC++ 向けには何の効果も与えない効果があるので、 clang++, g++, cl.exe の何れでコンパイルする可能性があるプロジェクトで用いるなどしても MSVC++ で副作用が生じる事はない。