1

C++98 / C++11 スイッチを cmake ベースのビルド システムに追加したいと考えています。クロスプラットフォーム関連の理由により、すでに次の別のスイッチがあります。

if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98")
else()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
endif()

したがって、C++11 を追加するには、同様の節を追加する必要がありますが、コードが重複しているため、これは嫌いです。標準から独立して拡張機能を有効にすることは本当に不可能ですか? 何かのようなもの:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${STANDARD_FLAG} ${EXTENSION_FLAGS}")
4

2 に答える 2

4

あなたはこれを行うことができます:

if(USE_CXX_11)
  set(CXX_VERSION 11)
else()
  set(CXX_VERSION 98)
endif()

if(USE_GNU_EXTENSIONS)
  set(CXX_DIALECT gnu)
else()
  set(CXX_DIALECT c)
endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${CXX_DIALECT}++${CXX_VERSION}")
于 2013-09-13T13:37:25.663 に答える