2014-10-11 4 views
9

Ich versuche, C++ 11-Code in CLion auszuführen, aber es funktioniert nicht. Dort heißt es:Wie aktiviert man C++ 11 in CLion?

... 
    /projects/CLion/untitled/main.cpp:7:1: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11 
... 

I CMAKE_C_FLAGS--std=c++11 oder -std=gnu++11 zu setzen versucht, aber ich habe immer noch das gleiche Problem. Regulärer C++ - Code wird korrekt kompiliert.

Welche Flagge muss ich in CLions CMake-Fenster setzen, um meinen C++ 11-Code zu kompilieren?

Antwort

17

versuchte ich CMAKE_C_FLAGS

Nach den documentation die CMAKE_C_FLAGS Satz C-Sprache-Flags für alle build types einzustellen. Für C++ benötigen Sie CMAKE_CXX_FLAGS statt:

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
+0

Wo werden die Variablen 'CMAKE_CXX_FLAGS' gesetzt? Ich kenne CMake nicht sehr gut. – hlin117

+0

@ hlin117, 'CMAKE_CXX_FLAGS' befindet sich in der Datei 'CMakeLists'. – Gluttton

+0

Ich habe bemerkt, wie unklar meine Frage war, nachdem ich sie gepostet habe, tut mir leid. Ich wollte fragen, in der Zeile 'set (CMAKE_CXX_FLAGS $ {CMAKE_CXX_FLAGS} -std = C++ 11") 'muss das zweite' CMAKE_CXX_FLAGS' initialisiert werden, bevor es referenziert wird (mit '$'), aber wo ist es initialisiert?(Ich kann mir nicht vorstellen, dass die Variable sowohl initialisiert als auch in derselben Zeile referenziert ist.) – hlin117

9

für CMake 3.1 oder höher können Sie set the CMAKE_CXX_STANDARD variable-11:

Standardwert für CXX_STANDARD Eigenschaft von Zielen.

Diese Variable wird verwendet, um die Eigenschaft CXX_STANDARD für alle Ziele zu initialisieren.

CXX_STANDARD documentation:

Die Standard C++, deren Eigenschaften angefordert werden, um dieses Ziel zu bauen.

Diese Eigenschaft gibt den C++ - Standard an, dessen Features zum Erstellen dieses Ziels erforderlich sind. Bei einigen Compilern führt dies zum Hinzufügen eines Flags wie -std=gnu++11 zu der Kompilierungszeile.

Unterstützte Werte 98, 11 und 14.

Wenn der Wert angefordert hat in einem Kompilierung-Flag nicht dazu führen, für den Compiler in Gebrauch hinzugefügt werden, ein vorheriger wird Standard-Flag statt hinzugefügt werden. Das bedeutet, dass unter Verwendung von:

set_property(TARGET tgt PROPERTY CXX_STANDARD 11) 

mit einem Compiler, die nicht -std=gnu++11 unterstützt oder ein äquivalentes Flag wird in einem Fehler oder eine Warnung nicht dazu führen, sondern stattdessen die -std=gnu++98 Flags hinzuzufügen, wenn unterstützt. Dieses "Zerfalls" -Verhalten kann mit der Zieleigenschaft CXX_STANDARD_REQUIRED gesteuert werden.

Informationen zu Kompilierungsfunktionen finden Sie im Handbuch cmake-compile-features(7).

Diese Eigenschaft wird durch den Wert der Variablen CMAKE_CXX_STANDARD initialisiert, wenn sie beim Erstellen eines Ziels festgelegt wird.

+4

Was ist, wenn ich '-std = C++ 11' und nicht' -std = gnu ++ 11' möchte, wie unterscheidet 'CXX_STANDARD 11' die beiden? – Ela782