2014-09-17 32 views
6

Tôi đang cố gắng biên dịch một số mã bằng cú pháp C++ 11 trong JetBrains CLion, vì vậy tôi muốn tắt chế độ C++ 98. Tôi đã làm theo các hướng dẫn theo quy định của this StackOverflow question, nhưng tôi không thể làm cho nó hoạt động.CLion vô hiệu hóa chế độ C++ 98 để ủng hộ C++ 11

Để đạt được mục tiêu này, tôi đã chuyển đến ALT + SHIFT + F10 và chuyển đối số -std=c++11 trong Đối số chương trình.

Khi xây dựng lại, chế độ C++ 98 vẫn có vẻ được bật.

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

trong mã

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

Trong khi Tôi khá chắc chắn vấn đề không nằm trong mã của tôi (IdeoneC++11 so IdeoneC++98 (4.8.1))

Ảnh: CLion Interface

Những gì tôi muốn tưởng tượng là chuỗi tổng hợp (mỗi nhận xét):

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

Vì vậy, nó không xuất hiện nó bao gồm nội dung của tôi.

Tôi không có nhiều kinh nghiệm với các JetBrains IDE khác, nhưng từ những gì tôi có thể nói chúng hầu như giống nhau.

Có ai có thể tạo lại điều này không? Tôi có nên gửi phản hồi cho JetBrains rằng điều này có thể không hoạt động 100% (nó vẫn là bản phát hành ban đầu)? Hay tôi chỉ làm hỏng nó và có lỗi người dùng ở đây không?

Cảm ơn!

+0

Không bao giờ sử dụng CLion, nhưng có cách nào để xem trình biên dịch g ++ thực sự đang hoạt động hay không, tức là chế độ "tiết"? Bằng cách đó bạn có thể nhìn thấy nếu đối số của bạn đang được chọn nhưng bỏ qua, không bao giờ được chọn, v.v. – PaulMcKenzie

+0

@PaulMcKenzie Tôi đã thêm chuỗi C: \ cygwin64 \ bin \ cmake.exe - Tôi không chắc đó có phải là chính xác những gì bạn đang tìm kiếm, nhưng đó là điều tốt nhất tôi có thể tìm thấy. Đối với thông tin gỡ lỗi bổ sung - Tôi không thể tìm thấy tùy chọn đó. – Zarthus

+0

Một IDE thường có một cửa sổ hoặc một số phương tiện để bạn có thể thấy toàn bộ chuỗi dòng lệnh mà trình biên dịch đang sử dụng. Nếu không, bạn đang biên dịch một cách mù quáng. 'Cmake' sử dụng một tệp và bên trong tệp đó có chuỗi lệnh được trình biên dịch sử dụng. Về cơ bản những gì bạn cần để tìm ra là chuỗi lệnh chính xác được sử dụng bởi trình biên dịch, và sau đó làm việc từ đó. – PaulMcKenzie

Trả lời

8

Điều này đã được giải quyết bằng cách thêm add_definitions(-std=c++11) vào cuối CMakeLists.txt thay vì trong đối số dòng lệnh ALT + SHIFT + F10.

+1

Không 'bộ (CXX_STANDARD 11)' cũng không được đặt (CMAKE_CXX_FLAGS "$ {CMAKE_CXX_FLAGS} -std = C++ 11") 'sẽ làm việc cho tôi, nhưng điều này đã làm. Cảm ơn! – WhiteHotLoveTiger

Các vấn đề liên quan