2013-08-21 36 views

Trả lời

19

Câu trả lời khá đơn giản.

Trình tạo cdt eclipse bỏ qua các định nghĩa được thêm bằng các định nghĩa bổ sung (...) khi phân tích cú pháp các ký hiệu. Thay vào đó, nó sử dụng CMAKE_CXX_COMPILER_ARG1. Vì vậy, tất cả các bạn phải làm là: Thêm -DCMAKE_CXX_COMPILER_ARG1 = -std = C++ 11 khi gọi cmake

file dự án Tạo từ dòng lệnh:

cmake ../../src -G"Eclipse CDT4 - MinGW Makefiles" -DCMAKE_ECLIPSE_VERSION=4.2 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_ARG1=-std=c++11 

dự án Tạo từ cmake gui:

- Select source and build directory. 
- now BEFORE hitting configure or generate. Press "Add Entry" and add a new entry. Name:CMAKE_CXX_COMPILER_ARG1 Type:STRING Value:-std=c++11 
- press Generate and create the Eclipse project 

Điều quan trọng là đặt trước CMAKE_CXX_COMPILER_ARG1 trước khi nhấn định cấu hình hoặc tạo lần đầu tiên!

Đó là điều đó. Dự án sẽ được tạo ra với các biểu tượng chính xác. lập chỉ mục, đánh dấu cú pháp và tự động hoàn thành sẽ hoạt động như dự định mà không thay đổi bất kỳ cài đặt dự án nào bằng tay.

+0

Nó không làm việc cho tôi. Tôi đang sử dụng cmake 3.5.1 và eclipse Kepler.I vẫn phải làm những gì các điểm thứ hai ở đây đề nghị để làm (https://stackoverflow.com/a/14381512/1971003) - Bất cứ điều gì tôi đang thiếu ở đây? Cảm ơn !! –

3

Trong phiên bản 3.1 của cmake một biến mới CMAKE_CXX_STANDARD đã được giới thiệu có thể kích hoạt hỗ trợ C++ 11. Hãy thử một cái gì đó như thế này:

cmake ../../src -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_STANDARD=11 

Điều này dường như được chuyển sang dự án Eclipse đã tạo. Tôi đã thử nó với verison 3.2.0-rc2 và Eclipse được công nhận C++ 11 tính năng như std :: shared_ptr <>.

Một số liên kết tài liệu:

+1

Không, tôi đã thử đặt CMAKE_CXX_STANDARD = 14 bằng CMake 3.2.1. GCC đặt tiêu chuẩn cho gnu ++ 14, và Eclipse thì không. –

+0

Hãy thử 'cmake -G 'Eclipse CDT4 - Makefiles của Unix" -DCMAKE_CXX_FLAGS = "- std = C++ 14" .' – Tik0

4

Như đã đề cập, các gọi của máy phát điện dự án chạy trước các phân tích cú pháp của số CMakeLists.txt. Do đó, mọi định nghĩa bên trong CMakeLists.txt không có bất kỳ ảnh hưởng nào đối với tệp dự án đã tạo.

Trong trường hợp tạo dự án nhật thực, các khả năng của trình biên dịch được yêu cầu bên trong CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake. Trong dòng 23 biến số CMAKE_CXX_FLAGS được phân tích cú pháp được đánh giá trong dòng 30. Đặc biệt là nàyCMAKE_CXX_FLAGS biến chỉ có thể được đặt trong khi gọi cmake từ dòng lệnh.

Recommodation của cmake thích invokation: cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_FLAGS="-std=c++11" (hoặc thay thế c++11 với ví dụ.c++14 hoặc chuẩn bất kỳ khác mà bạn thích)

Gợi ý: Kết quả từ đánh giá dòng 30 có thể được nhìn thấy từ cách chạy lệnh sau đây là một ví dụ: touch /tmp/dummy; /usr/bin/c++ -v -E -x c++ -std=c++11 -dD /tmp/dummy. Nó xuất ra tất cả các định nghĩa từ trình biên dịch được phân tích cú pháp vào eclipse-project:

... 
#define __STDC__ 1 
#define __cplusplus 201103L 
... 
+1

Điều này làm việc cho tôi, sử dụng Eclipse 4.5, cmake 3.7.2 và TDM-GCC 5.1. – gurka

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