2014-09-17 13 views
6

Próbuję skompilować kod przy użyciu składni tylko C++ 11 w Kliencie JetBrains, więc chcę wyłączyć tryb C++ 98. Postępowałem zgodnie z instrukcjami zgodnymi z this StackOverflow question, ale nie mogę go uruchomić.Klawisz CLION wyłącza tryb C++ 98 na rzecz C++ 11

Aby osiągnąć ten cel, udałem się do ALT + SHIFT + F10 i przekazałem argument -std=c++11 w Argumenty programowe.

Po ponownym zbudowaniu tryb C++ 98 nadal wydaje się być włączony.

/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) 
           ^

w kodzie

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

Chociaż jestem prawie pewien, że problem nie leży w moim kodzie (IdeoneC++11 kontra IdeoneC++98 (4.8.1))

Obrazek: CLion Interface

co ja wyobraź sobie łańcuch kompilacji (na komentarze):

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

Wygląda na to, że nie zawiera mojej zawartości.

Nie mam dużego doświadczenia z innymi IDE JetBrains, ale z tego, co mogłem powiedzieć, są one w większości takie same.

Czy ktoś jest w stanie to odtworzyć? Czy powinienem wysłać opinię do JetBrains, że to może nie działać w 100% (nadal jest to kompilacja wczesnego wydania)? Czy mogę po prostu spartaczyć i czy jest tu błąd użytkownika?

Dzięki!

+0

Nigdy nie używałeś CLion, ale czy istnieje sposób sprawdzenia, co właściwie robi kompilator g ++, tj. Tryb "gadatliwy"? W ten sposób można sprawdzić, czy argumenty są zbierane, ale ignorowane, nigdy nie są pobierane itp. – PaulMcKenzie

+0

@PaulMcKenzie Dodałem ciąg C: \ cygwin64 \ bin \ cmake.exe - nie jestem pewien, czy to jest dokładnie to, co Ty szukam, ale to najlepsze, co mogłem znaleźć. Jeśli chodzi o dodatkowe informacje debugowania - nie mogłem znaleźć takiej opcji. – Zarthus

+0

IDE zwykle ma okno lub niektóre środki, dzięki czemu można zobaczyć cały ciąg wiersza polecenia, którego używa kompilator. W przeciwnym razie kompilujesz na ślepo. 'Cmake' używa pliku, a wewnątrz tego pliku znajduje się ciąg poleceń używany przez kompilator. Zasadniczo, musisz znaleźć dokładny ciąg poleceń używany przez kompilator, a następnie pracować z tego miejsca. – PaulMcKenzie

Odpowiedz

8

Zostało to rozwiązane przez dodanie add_definitions(-std=c++11) do końca CMakeLists.txt zamiast w argumentach wiersza poleceń ALT + SHIFT + F10.

+1

Ani 'set (CXX_STANDARD 11)' ani 'set (CMAKE_CXX_FLAGS" $ {CMAKE_CXX_FLAGS} -std = C++ 11 ")' zadziałałyby dla mnie, ale tak się stało. Dzięki! – WhiteHotLoveTiger