2014-09-17 6 views
6

Ich versuche, einige Code mit C++ 11 nur Syntax in JetBrains CLion zu kompilieren, also möchte ich C++ 98-Modus deaktivieren. Ich habe die Anweisungen gemäß this StackOverflow question befolgt, kann aber nicht funktionieren.CLion deaktivieren C++ 98-Modus für C++ 11

Um dieses Ziel zu erreichen, ging ich zu ALT + UMSCHALT + F10 und übergab das Argument -std=c++11 in Programmargumente.

Beim erneuten Erstellen scheint der C++ 98-Modus weiterhin aktiviert zu sein.

/cygdrive/c/Users/Zarthus/Documents/test/command.cpp: In constructor 'Command::Command(std::vector<std::basic_string<char> >)': 
/cygdrive/c/Users/Zarthus/Documents/test/command.cpp:25:32: error: range-based 'for' loops are not allowed in C++98 mode 
    for (std::string command : commands) 
           ^

im Code

Command::Command(std::vector<std::string> cmds) 
{ 
    for (std::string command : cmds) 
    { 
     addCommand(command); 
    } 
} 

Während ich ziemlich sicher bin, das Problem nicht in meinem Code (IdeoneC++11 gegen IdeoneC++98 (4.8.1))

Bild liegt: CLion Interface

Was würde ich Stellen Sie sich vor, die Kompilierungszeichenfolge (pro Kommentar):

C:\cygwin64\bin\cmake.exe --build C:\Users\Zarthus\.clion10\system\cmake\generated\6dd8bed\6dd8bed\Debug --target testProject -- -j 4 

So scheint es nicht, dass es meine Inhalte enthält.

Ich habe nicht viel Erfahrung mit anderen JetBrains IDEs, aber von dem, was ich sagen konnte, sind sie meistens gleich.

Kann jemand das reproduzieren? Sollte ich ein Feedback an JetBrains senden, dass dies möglicherweise nicht 100% funktioniert (es ist immer noch eine frühe Version)? Oder mache ich es einfach kaputt und gibt es hier einen Benutzerfehler?

Danke!

+0

Niemals CLion verwendet, aber gibt es eine Möglichkeit zu sehen, was der g ++ - Compiler eigentlich macht, d. H. Einen "ausführlichen" Modus? Auf diese Weise können Sie sehen, ob Ihre Argumente abgeholt, aber ignoriert, nie abgeholt werden usw. – PaulMcKenzie

+0

@PaulMcKenzie Ich habe einen C: \ cygwin64 \ bin \ cmake.exe String hinzugefügt - ich bin mir nicht sicher, ob das genau das ist Ich suche nach, aber es ist das Beste, was ich finden konnte. Wie für zusätzliche Debug-Informationen - ich konnte eine solche Option nicht finden. – Zarthus

+0

Eine IDE hat normalerweise ein Fenster oder einige Mittel, so dass Sie die gesamte Befehlszeile sehen können, die der Compiler verwendet. Sonst kompilierst du blindlings. Der 'cmake' verwendet eine Datei und innerhalb dieser Datei befindet sich die vom Compiler verwendete Befehlszeichenfolge. Was Sie herausfinden müssen, ist die exakte Befehlsfolge, die vom Compiler verwendet wird, und dann von dort aus arbeiten. – PaulMcKenzie

Antwort

8

Dies wurde behoben, indem add_definitions(-std=c++11) am Ende von CMakeLists.txt statt in den Befehlszeilenargumenten ALT + SHIFT + F10 hinzugefügt wurde.

+1

Weder 'set (CXX_STANDARD 11)' noch 'set (CMAKE_CXX_FLAGS" $ {CMAKE_CXX_FLAGS} -std = C++ 11 ")' würde für mich arbeiten, aber das tat. Vielen Dank! – WhiteHotLoveTiger