CMake 3.1 では、使用できるCMAKE_CXX_STANDARD変数が導入されました。常に CMake 3.1 以降が利用可能であることがわかっている場合は、これを最上位の CMakeLists.txt ファイルに記述するか、新しいターゲットを定義する直前に配置できます。
set (CMAKE_CXX_STANDARD 11)
古いバージョンの CMake をサポートする必要がある場合は、私が思いついた次のマクロを使用できます。
macro(use_cxx11)
if (CMAKE_VERSION VERSION_LESS "3.1")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
endif ()
else ()
set (CMAKE_CXX_STANDARD 11)
endif ()
endmacro(use_cxx11)
マクロは現在 GCC のみをサポートしていますが、他のコンパイラに展開するのは簡単です。
use_cxx11()
次に、C++11 を使用するターゲットを定義する CMakeLists.txt ファイルの先頭に書き込むことができます。
macOS をターゲットとする clang ユーザー向けの CMake issue #15943
CMake と clang を使用して macOS をターゲットにしている場合、機能が機能しない (コンパイラ フラグを追加しない)原因となるバグがあります。CMAKE_CXX_STANDARD
次のいずれかを必ず実行してください。
cmake_minimum_requiredを使用して CMake 3.0 以降を要求するか、または
project
コマンドの前に、CMakeLists.txt ファイルの先頭にある次のコードを使用して、ポリシー CMP0025 を NEW に設定します。
# Fix behavior of CMAKE_CXX_STANDARD when targeting macOS.
if (POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif ()