CMake 3.1 führte die CMAKE_CXX_STANDARD
Variable, die Sie verwenden können. Wenn Sie wissen, dass Sie immer CMake 3.1 oder höher zur Verfügung haben werden, können Sie dies einfach in Ihre CMakeLists.txt-Datei auf oberster Ebene schreiben oder es direkt vor die Definition eines neuen Ziels setzen:
set (CMAKE_CXX_STANDARD 11)
Wenn Sie ältere Versionen von CMake unterstützen müssen (was heutzutage eher unwahrscheinlich ist), finden Sie hier ein Makro, das ich entwickelt habe und das Sie verwenden können:
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)
Das Makro unterstützt im Moment nur GCC, aber es sollte einfach sein, es auf andere Compiler zu erweitern.
Dann könnten Sie schreiben use_cxx11()
am Anfang jeder CMakeLists.txt-Datei, die ein Ziel definiert, das C++11 verwendet.
CMake-Problem #15943 für Clang-Benutzer, die macOS verwenden
Wenn Sie CMake und clang verwenden, um macOS zu zielen, gibt es eine Fehler die die Ursache für die CMAKE_CXX_STANDARD
Funktion einfach nicht funktionieren (keine Compiler-Flags hinzufügen). Stellen Sie sicher, dass Sie eines der folgenden Dinge tun:
-
使用方法 cmake_minimum_required
um CMake 3.0 oder höher zu benötigen, oder
-
Setzen Sie die Richtlinie CMP0025 auf NEW mit folgendem Code am Anfang Ihrer CMakeLists.txt-Datei vor der project
Befehl:
# Fix behavior of CMAKE_CXX_STANDARD when targeting macOS.
if (POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif ()