Làm cách nào để kích hoạt hỗ trợ C ++ 11 / C ++ 0x trong Eclipse CDT?


210

Nhật thực 3.7.1 CDT 1.4.1 GCC 4.6.2

Đây là một ví dụ về một đoạn mã C ++ 11:

auto text = std::unique_ptr<char[]>(new char[len]);

Trình soạn thảo Eclipse phàn nàn về:

Function 'unique_ptr' could not be resolved

Trình biên dịch Makefile hoạt động tốt. Làm thế nào để làm cho Eclipse ngừng phàn nàn về các loại lỗi này?


12
Ít nhất, nó phải làstd::unique_ptr<char[]>
Cubbi

Không chắc chắn đó là chính xác - char [] có thể chuyển đổi thành char * và unique_ptr <char> là một con trỏ thành char, như char *
Nick

1
Sẽ không unique_ptr<char>gọi delete, đó là sai từ khi nó được tạo ra với new[]?
Dietrich Epp

6
@Nick: Không, anh ấy đúng. Cách bạn viết nó sẽ gây ra deleteđược gọi, khi bạn cần delete[] gọi. Các unique_ptr<char>giả định rằng nó nhận được một con trỏ, mà bị xóa với delete. unique_ptr<char[]>mong đợi một mảng, được xóa với delete[]chính xác.
Nicol Bolas

Câu trả lời:


224

Tôi thấy đây bài viết trong diễn đàn Eclipse, chỉ cần đi theo những bậc thang và nó làm việc cho tôi. Tôi đang sử dụng Eclipse Indigo 20110615-0604 trên Windows với thiết lập Cygwin.

  • Tạo một dự án C ++ mới
  • Tùy chọn mặc định cho mọi thứ
  • Sau khi tạo xong, bấm chuột phải vào dự án và đi đến "Thuộc tính"
  • Xây dựng C / C ++ -> Cài đặt -> Cài đặt công cụ -> Trình biên dịch GCC C ++ -> Khác -> Cờ khác. Đặt -std=c++0x(hoặc cho phiên bản trình biên dịch mới hơn -std=c++11ở cuối. ... Thay vì Trình biên dịch GCC C ++, tôi cũng có trình biên dịch Cygwin
  • C / C ++ Chung -> Đường dẫn và Biểu tượng -> Biểu tượng -> GNU C ++. Nhấp vào "Thêm ..." và dán __GXX_EXPERIMENTAL_CXX0X__(đảm bảo nối thêm và thêm hai dấu gạch dưới) vào "Tên" và để trống "Giá trị".
  • Nhấn Áp dụng, làm bất cứ điều gì nó yêu cầu bạn làm, sau đó nhấn OK.

Bây giờ cũng có một mô tả về điều này trong Câu hỏi thường gặp về Eclipse : Các tính năng Câu hỏi thường gặp về Eclipse / C ++ 11 .

Cài đặt hình ảnh Eclipse


2
Yey, nó đã làm việc! Tuy nhiên, hãy đảm bảo thêm và thêm hai dấu gạch dưới vào GXX_EXPERIMENTAL_CXX0X - Tôi sẽ chấp nhận điều này trong thời gian này
Nick

5
Điều này đã loại bỏ các lỗi biên tập giả? Tôi không có vấn đề gì với việc biên dịch và các loại tiêu chuẩn mới được nhận ra, nhưng tôi không thể loại bỏ các lỗi cú pháp của trình soạn thảo cho phạm vi dựa trên các vòng lặp và tham chiếu giá trị &&.
juanchopanza

7
Câu hỏi tiếp theo tự nhiên bây giờ trở thành: chúng ta có thể tối ưu hóa quy trình làm việc của mình bằng cách lưu các Cài đặt Dự án C ++ cụ thể này vào một mẫu Dự án Eclipse mới nói "Dự án C ++ 11" không?
Nordlöw

38
Lưu ý: đối với bất kỳ ai đang tìm kiếm câu trả lời cho Juno, điều này không hoạt động .
Christopher

4
Đối với kepler / juno, giải pháp được tìm thấy trong câu trả lời này . Nó được đăng trong bản chỉnh sửa để trả lời của Johan Lundberg bên dưới, nhưng tôi cũng lưu ý nó ở đây, để làm cho câu trả lời được chấp nhận hoàn thiện hơn.
Không thể sử dụng Lumière

150

Hướng dẫn cho Eclipse CDT 4.4 Luna và 4.5 Mars

Đầu tiên, trước khi tạo dự án, hãy cấu hình trình phân tích cú pháp Eclipse:

Window-> Preferences-> C/C++-> Build-> Settings-> Discovery->CDT GCC Build-in Compiler Settings

trong hộp văn bản có tên Command to get compiler specsnối thêm-std=c++11

Bây giờ bạn có thể tạo dự án, cấu hình phụ thuộc vào loại dự án bạn đã tạo:

Đối với dự án được tạo dưới dạng: Tệp -> Mới -> Dự án -> C / C ++ -> Dự án C ++

Nhấp chuột phải vào dự án đã tạo và mở

Properties-> C/C++ Build-> Settings-> Tool Settings-> GCC C++ Compiler->Dialect

Đặt -std=c++11vào hộp văn bản có tiêu đề other dialect flagshoặc chọn ISO C++11từ Language standardthả xuống.

Đối với dự án CMake

Tạo tập tin dự án nhật thực (bên trong dự án của bạn)

mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..

Sau đó nhập thư mục được tạo vào nhật thực như dự án nhật thực tiêu chuẩn. Nhấp chuột phải vào dự án và mở

Properties-> C/C++ General-> Preprocessor Include Paths, Marcos etc.->Providers

kích hoạt CDT GCC Build-in Compiler Settingsvà di chuyển nó cao hơn Contributed PathEntry Containers(Điều này rất quan trọng)

Bước chung cuối cùng

biên dịch lại, tái tạo Project-> C/C++ Indexvà khởi động lại Eclipse.


1
Hoạt động hoàn hảo ngay cả khi không cần khởi động lại nhật thực. Cảm ơn bạn.
prasannak

Cảm ơn bạn. Không có câu trả lời khác làm việc cho tôi về Luna quá.
Mohamed El-Nakib

Vẫn hoạt động trên sao Hỏa. Hơn cả câu trả lời tuyệt vời! Nếu tôi chỉ có thể bỏ phiếu lên câu trả lời này hai lần!
Mohamed El-Nakib

Cảm ơn! Đây là câu trả lời hữu ích nhất cho vấn đề tôi gặp phải (4.5)
AturSams 23/8/2015

2
Đối với Eclipse Neon.3, với dự án Makefile C ++, cài đặt dự án cần thêm -std=c++11vào là Project Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:. Nối bạn -std=c++11vào đó. Tôi đã đặt nó trong cài đặt không gian làm việc toàn cầu như đề xuất, nhưng nó không được sao chép vào vị trí tôi mô tả ở trên khi tôi tạo một Makefiledự án mới .
BeeOnRope

112

Cập nhật 2016:

Kể từ gcc 6 ( thay đổi ), phương ngữ C ++ mặc định là C ++ 14. Điều đó có nghĩa là trừ khi bạn rõ ràng cần một phương ngữ mới hơn hoặc cũ hơn, bạn không cần phải làm gì với nhật thực nữa.

Dành cho Luna và Sao Hỏa

Phần wiki cộng đồng này kết hợp câu trả lời của Trismegistos;

1. Trước khi tạo dự án, hãy cấu hình trình phân tích cú pháp Eclipse:

Cửa sổ -> Tùy chọn -> C / C ++ -> Xây dựng -> Cài đặt -> Khám phá -> Cài đặt trình biên dịch tích hợp CDT GCC

trong hộp văn bản có tên Lệnh để lấy thông số kỹ thuật của trình biên dịch nối thêm -std=c++14 2. Tạo dự án, cấu hình phụ thuộc vào loại dự án bạn đã tạo:

Đối với dự án được tạo dưới dạng: Tệp -> Mới -> Dự án -> C / C ++ -> Dự án C ++

Nhấp chuột phải vào dự án đã tạo và mở

Thuộc tính -> Bản dựng C / C ++ -> Cài đặt -> Cài đặt công cụ -> Trình biên dịch GCC C ++ -> Phương ngữ

Đặt -std=c++14vào hộp văn bản có tiêu đề các cờ phương ngữ khác hoặc chọn ISO C ++ 11 từ tiêu chuẩn Ngôn ngữ thả xuống.

Giờ đây đã có một cách mới để giải quyết vấn đề này mà không cần hack GXX_EXPERIMENTAL.

Đối với các phiên bản gần đây nhất : (Hiện tại Juno và Kepler Luna ):

Trong các phiên bản mới hơn của Juno, các cài đặt được đặt tại Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

Các phiên bản cũ hơn 2012/2013:

  1. Trong C / C ++ Build (tại cài đặt dự án), tìm Đường dẫn bao gồm tiền xử lý và đi tới tab Nhà cung cấp . Bỏ chọn tất cả ngoại trừ Cài đặt trình biên dịch dựng sẵn CDT GCC. Sau đó bỏ chọn Chia sẻ cài đặt mục nhập. Thêm tùy chọn -std = c ++ 11 vào hộp văn bản có tên Command để lấy thông số kỹ thuật của trình biên dịch.

  2. Đi đến đường dẫn và biểu tượng. Trong Biểu tượng, bấm khôi phục mặc định , rồi áp dụng.


Ghi chú:

Eclipse rất kén chọn việc nhấn áp dụng, bạn cần làm điều đó mỗi khi bạn rời khỏi tab cài đặt.

[Tự quảng cáo]: Tôi đã viết hướng dẫn chi tiết hơn của riêng tôi dựa trên những điều trên. http://scrupiousabstrilities.tumblr.com/post/36441490955/eclipse-mingw-builds

Cảm ơn người dùng Nobodytại https://stackoverflow.com/a/13635080/1149664


3
Cảm ơn bạn nhưng nó không giúp tôi giải quyết các tài liệu tham khảo c ++ 11. Chương trình biên dịch chính xác, nhưng nhật thực không thể giải quyết chúng. Khi tôi kiểm tra "mảng", #ifndef __GXX_EXPERIMENTAL_CXX0X__trả về true và mã bên dưới nó không được phân tích cú pháp. Khi tôi thêm __GXX_EXPERIMENTAL_CXX0X__vào các ký hiệu dự án, mảng sẽ được giải quyết nhưng các tham chiếu của dự án của tôi bị rối. Điều gì có thể là vấn đề ở đây?
Halil Kaskavalci

1
Tôi nghĩ đó là một lỗi. Tôi tái sản xuất nó như thế này: Mở dự án mới. Kích hoạt tính năng c ++ 11. Thêm một lớp ngẫu nhiên với một biến công khai. Tạo vector của lớp ngẫu nhiên này. Lấy trình vòng lặp. Cố gắng truy cập biến công khai. Không gian làm việc của tôi bị hỏng hoặc có một lỗi trong Eclipse không thể phân tích cú pháp này.
Halil Kaskavalci

1
@HalilKaskavalci Tôi thấy lỗi tương tự. Nếu tôi đặt trình chỉnh sửa cho c ++ 11, các trình lặp không thể giải quyết. Nếu tôi không, std :: unique_ptr không thể giải quyết. Thực sự khó chịu, vì tôi sử dụng cả hai.
Kian

1
@Kian Mình báo lỗi. bug.eclipse.org/bugs/show_orms.cgi?id=397027 . Điều này khá khó chịu và tôi bắt đầu sử dụng các thư viện boost, chúng không tạo ra lỗi :)
Halil Kaskavalci

1
làm việc cho tôi Cảm ơn bạn! (đã làm điều đó bằng tài liệu tham khảo của bạn) Tôi đã thêm -std = c ++ 11 cho các nhà cung cấp và khôi phục mặc định trong các biểu tượng. Tôi nghĩ khôi phục mặc định trong các biểu tượng giúp tôi tiết kiệm. Bây giờ unique_ptr đang giải quyết.
Denis Zaikin

20

Đối với cdt nhật thực mới nhất (Juno) sau đây làm việc cho tôi, không cần phải tự khai báo __GXX_EXPERIMENTAL_CXX0X__. Cái này hoạt động cho bộ chỉ mục CDT và làm tham số cho trình biên dịch:

"tên dự án của bạn" -> nhấp chuột phải -> thuộc tính:

C / C ++ Chung -> Bộ tiền xử lý Bao gồm Đường dẫn, Macro, v.v. -> chuyển sang tab có tên "Nhà cung cấp":

  • đối với "Cấu hình", chọn "Phát hành" (và sau đó "gỡ lỗi")

  • tắt tất cả các nhà cung cấp và chỉ chọn "Cài đặt trình biên dịch tích hợp CDT GCC"

  • bỏ chọn "Chia sẻ các mục thiết lập giữa các dự án (nhà cung cấp toàn cầu)"

  • trong "Lệnh để nhận thông số kỹ thuật của trình biên dịch:" thêm "-std = c ++ 11" mà không có dấu ngoặc kép (cũng có thể hoạt động với dấu ngoặc kép)

  • nhấn áp dụng và đóng các tùy chọn

  • xây dựng lại chỉ số

Bây giờ tất cả các công cụ liên quan đến c ++ 11 phải được giải quyết chính xác bởi người lập chỉ mục.

win7 x64, nhật thực chính thức mới nhất với cdt mingw-w64 gcc 4.7.2 từ dự án mingwbuilds trên sourceforge


vẫn nhận được các cảnh báo biên tập sai, như trong Loại 'std :: thread' không thể được giải quyết mặc dù nó biên dịch và thực thi OK
Scott Stensland

2
bạn cần phải biên dịch một lần với các cài đặt mới, vì vậy trình phân tích cú pháp sẽ "tìm hiểu" rằng cờ std = c ++ 11 được đặt
Andreas

tùy thuộc vào phiên bản trình biên dịch, có thể cần phải thêm -std = c ++ 0x thay vì -std = c ++ 11 (ví dụ: debian
wheezy

15

Tôi đã có cùng một vấn đề trên Juno Eclipse của tôi. Các bước này đã giải quyết vấn đề:

  • Tới Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols].
  • Thêm ký hiệu: __cplusplus với giá trị 201103L

2
Điều này nên được chấp nhận câu trả lời vì nó cũng hoạt động cho các dự án Makefile!
omikron

@ Jerk31 cái này không hoạt động cho Eclipse Juno chạy trên windows (đối với tôi), tôi vẫn thấy những lỗi bị phàn nàn không cần thiết, mặc dù nhị phân đang hoạt động tốt. Làm ơn giúp tôi!!!
trao đổi quá mức

Tôi thực sự xin lỗi tôi không thể giúp bạn trên Windows Tôi không có cơ hội thử thực hiện bất kỳ dự án C ++ nào trên HĐH này. Tôi chúc bạn những điều tốt đẹp và may mắn!
Jerome

13

Đối với CDT Kepler của Eclipse, điều làm việc cho tôi để thoát khỏi std::threadbiểu tượng chưa được giải quyết là:

  1. Chuyển đến Tùy chọn-> C / C ++ -> Xây dựng-> Cài đặt

  2. Chọn tab Khám phá

  3. Chọn Cài đặt trình biên dịch tích hợp CDT GCC [Được chia sẻ]

  4. Thêm trường -std = c ++ 11 vào trường "Lệnh để lấy thông số kỹ thuật của trình biên dịch:" như:

$ {THÔNG TIN} -E -P -v -dD -std = c ++ 11 $ {INPUTS}

  1. Ok và Rebuild Index cho dự án.

Thêm -std=c++11vào các dự án Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Cờ không đủ cho Kepler, tuy nhiên nó là đủ cho các phiên bản cũ hơn như Helios.


Đối với Phiên bản Eclipse: 2019-09 R. Tuy nhiên, giải pháp này hiệu quả với tôi, tôi đã dành rất nhiều thời gian trước đó. Vấn đề nằm ở Cài đặt Trình tạo: Dự án -> Thuộc tính -> Bản dựng C / C ++: trong tab 'Cài đặt trình tạo' chọn 'Trình tạo nội bộ' cho 'Loại trình tạo'.
grekhss

5

Tôi chưa thể bình luận vì vậy tôi đang viết câu trả lời của riêng mình:

Nó liên quan đến __GXX_EXPERIMENTAL_CXX0X__và nó hợp lệ cho Eclipse Juno và CDT 8.x.

Một số phần của câu trả lời này đã được đề cập trong các câu trả lời khác nhưng tôi muốn nó được mạch lạc.

Để có thể xây dựng bằng stdc ++ 11, người ta phải thêm cờ cụ thể cho trình biên dịch. Bạn có thể làm điều đó thông qua các thuộc tính dự án. Để sửa đổi các thuộc tính dự án RMBProject propertieshoặc ALT + ENTER. Sau đó, C / C ++ Build -> Cài đặt -> Cài đặt công cụ -> Trình biên dịch GCC C ++ -> Khác -> Cờ khác. Đặt -std = c ++ 11 ở cuối dòng, đối với GCC, nó sẽ trông giống như : -c -fmessage-length=0 -std=c++11. Bằng cách thêm trình biên dịch cờ -stdc ++ 11 (GCC) sẽ tự khai báo __GXX_EXPERIMENTAL_CXX0X__.

Tại thời điểm này, bạn có thể xây dựng dự án bằng tất cả sự tốt đẹp của C ++ 11.

Vấn đề là Eclipse có trình phân tích cú pháp riêng để kiểm tra lỗi - đó là lý do tại sao bạn vẫn nhận được tất cả các lỗi khó chịu trong trình soạn thảo Eclipse, đồng thời bạn có thể xây dựng và chạy dự án mà không cần bất kỳ lỗi nào. Có một cách để giải quyết vấn đề này bằng cách tuyên bố rõ ràng __GXX_EXPERIMENTAL_CXX0X__cờ cho dự án, người ta có thể làm điều đó (giống như Carsten Greiner đã nói): C / C ++ General -> Paths and Symbols -> Symbols -> GNU C ++. Nhấp vào "Thêm ..." và quá khứ __GXX_EXPERIMENTAL_CXX0X__(đảm bảo nối thêm và thêm hai dấu gạch dưới) vào "Tên" và để trống "Giá trị". Và bây giờ là phần bổ sung mà tôi muốn trình bày trong phần bình luận cho câu trả lời đầu tiên, hãy truy cập: C / C ++ General -> Bộ tiền xử lý Bao gồm các macro đường dẫn, v.v. -> Nhà cung cấp và ChọnCDT Managed Build Setting Entriessau đó nhấp vào ÁP DỤNG và quay lại tab Entries, trong GNU C ++, bây giờ sẽ có CDT Managed Build Settings Entries kiểm tra xem bên trong có được xác định __GXX_EXPERIMENTAL_CXX0X__không -> ÁP DỤNG và xây dựng lại chỉ mục bạn sẽ ổn vào thời điểm này.


3

Tôi cũng gặp một số vấn đề (Ubuntu 13.04 64-bit, g ++ - 4.8, nhật thực Juno 3.8.1, CDT 6.0.0). Rất nhiều điều được đề cập ở trên, xin lỗi để lặp lại những điều đó, nhưng ngoài ra tôi đã gặp vấn đề khi sử dụng

std::thread

như một phần của c ++ 11 (thêm -pthread cho trình liên kết giải quyết vấn đề đó). Dù sao, cuối cùng các cài đặt này đã hoạt động tốt:

Dự án -> Thuộc tính -> Xây dựng C / C ++ -> Cài đặt -> Khác. Thêm

-std=c++11

cờ cho trình biên dịch GCC và G ++. Nhấp vào Áp dụng.

Đối với trình liên kết, cùng một cửa sổ, cờ khác, cờ liên kết, đã thêm

-pthread

cờ. Cài đặt thư viện dùng chung, Tên đối tượng dùng chung, thêm

-Wl,--no-as-needed

cờ cũng vậy. Nhấp vào Áp dụng.

C / C ++ Chung -> Đường dẫn và ký hiệu -> Biểu tượng TAB, GNU C ++ được chọn, Thêm

__GXX_EXPERIMENTAL_CXX0X__

(không có giá trị)

cờ. Nhấp vào Áp dụng.

C / C ++ Chung -> Bộ tiền xử lý Bao gồm các đường dẫn .. -> Tab Nhà cung cấp: kiểm tra

Cài đặt trình biên dịch tích hợp CDT GCC

và cho "Lệnh để nhận thông số kỹ thuật của trình biên dịch", hãy thêm

-std=c++11

cờ. Bỏ chọn Chia sẻ. Nhấp vào Áp dụng.

Quản lý CDT Xây dựng mục nhập cài đặt, kiểm tra điều này quá. Bỏ chọn hai người khác. Nhấp vào Áp dụng.

Quay trở lại tab Entries, GNU C ++ CDT Quản lý Xây dựng các mục nhập, bây giờ bạn sẽ thấy phần bổ sung của bạn

__GXX_EXPERIMENTAL_CXX0X__

nhập cảnh.

Đó là nó. Khi mã hóa, gõ

std::

Bây giờ có thể tự động hoàn thành lớp luồng, các bản dựng sẽ hoạt động tốt và không nên có

std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted

trong thời gian chạy.


Đó là Project -> Properties -> C/C++ Build -> Settings -> Miscellaneousbước làm việc cho tôi. Cảm ơn rất nhiều: D
Jake88

2

Tôi không biết nếu chỉ có tôi, giải pháp được xếp hạng cao nhất không phù hợp với tôi, phiên bản nhật thực của tôi chỉ là nền tảng nhật thực bình thường được cài đặt bằng cách sử dụng nhật thực cài đặt sudo apt-get trong Ubuntu Nhưng tôi đã tìm thấy một giải pháp áp dụng phương pháp này cùng nhau từ cả giải pháp được xếp hạng cao nhất và giải pháp thứ hai, những gì tôi đã làm để làm cho nó hoạt động được mô tả như dưới đây (Lưu ý rằng các bước khác như tạo dự án C ++, v.v ... bị bỏ qua vì đơn giản)

Khi bạn đã tạo dự án C ++

(1) Chung C / C ++ -> Đường dẫn và Biểu tượng -> Biểu tượng -> GNU C ++. Nhấp vào "Thêm ..." và dán GXX_EXPERIMENTAL_CXX0X (đảm bảo nối thêm và thêm hai dấu gạch dưới) vào "Tên" và để trống "Giá trị".

(2) Trong C / C ++ Build (tại cài đặt dự án), tìm Đường dẫn bao gồm tiền xử lý và đi tới tab Nhà cung cấp. Bỏ chọn tất cả ngoại trừ Cài đặt trình biên dịch dựng sẵn CDT GCC. Sau đó bỏ chọn Chia sẻ cài đặt mục nhập. Thêm tùy chọn -std = c ++ 11 vào hộp văn bản có tên Command để lấy thông số kỹ thuật của trình biên dịch

Sau khi thực hiện trên 2 và 2 bước duy nhất, nó hoạt động, nhật thực có thể giải quyết unique_ptr, tôi không biết tại sao giải pháp này hoạt động, hy vọng rằng nó có thể giúp mọi người.


Điều này cũng làm việc cho tôi (nhật thực neon). Lúc đầu, tôi không bỏ chọn các nhà cung cấp khác, vẫn gây ra sự cố, nhưng bỏ chọn tất cả các nhà cung cấp khác ngoài "Cài đặt trình biên dịch tích hợp CDT GCC" và "Cài đặt người dùng CDT" hoạt động. Cảm ơn!
zpon

2

Eclipse C / C ++ không nhận ra biểu tượng std::unique_ptrmặc dù bạn đã bao gồm tiêu đề bộ nhớ C ++ 11 trong tệp của mình.

Giả sử bạn đang sử dụng trình biên dịch GNU C ++, đây là điều tôi đã làm để khắc phục:

Dự án -> Thuộc tính -> Chung C / C ++ -> Bộ xử lý bao gồm đường dẫn -> GNU C ++ -> Mục nhập cài đặt người dùng CDT

  1. Nhấp vào nút "Thêm ..."

  2. Chọn "Macro tiền xử lý" từ menu thả xuống

    Name: __cplusplus     Value:  201103L
  3. Nhấn Áp dụng, và sau đó OK để quay lại dự án của bạn

  4. Sau đó, xây dựng lại cho bạn chỉ mục C ++: Dự án -> Chỉ số C / C ++ -> Xây dựng lại


Đây là phương pháp duy nhất hiệu quả với tôi trong Eclipse 2018-12. Câu trả lời "được chấp nhận", v.v., không còn hoạt động trong năm 2018-12.
David Steinhauer

1

Đối với tôi trên Eclipse neon Tôi đã theo dõi câu trả lời của Trismegistos ở đây , YET tôi cũng đã thêm một bước bổ sung:

  • Đi đến dự án -> Thuộc tính -> Chung C ++ -> Bộ xử lý trước Bao gồm đường dẫn, Macro, v.v. -> Nhà cung cấp -> Cài đặt trình biên dịch tích hợp CDT Cross GCC, gắn cờ "-std = c ++ 11"

Nhấn áp dụng và OK.

Chúc mừng

Chàng.


0
  • nhấn chuột phải vào dự án và đi đến "Thuộc tính"
  • Xây dựng C / C ++ -> Cài đặt -> Cài đặt công cụ -> Trình biên dịch GCC C ++ -> Khác -> Cờ khác. Đặt -lm ở cuối hộp văn bản cờ khác và OK.

Phiên bản này của Eclipse là gì?
Braiam

0

Cả bản hack và phiên bản sạch hơn đều không hoạt động cho Indigo. Việc hack bị bỏ qua và các tùy chọn cấu hình bắt buộc bị thiếu. Không có lý do rõ ràng, xây dựng bắt đầu làm việc sau khi không làm việc và không cung cấp bất kỳ lý do hữu ích tại sao. Ít nhất từ ​​dòng lệnh, tôi nhận được kết quả có thể lặp lại.


0

Để nhận được hỗ trợ cho C ++ 14 trong Eclipse Luna, bạn có thể thực hiện các bước sau:

  • Trong C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings , thêm "-std = c ++ 14"
  • TrongC++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous , thêm "-std = c ++ 14"

Reindex dự án của bạn và cuối cùng khởi động lại Eclipse. Nó sẽ làm việc như mong đợi.


0

Tôi đã giải quyết nó theo cách này trên máy Mac. Tôi đã sử dụng Homebrew để cài đặt phiên bản gcc / g ++ mới nhất. Họ hạ cánh trong / usr / local / bin với bao gồm trong / usr / local / bao gồm.

Tôi CD'd vào / usr / local / bin và tạo một liên kết tượng trưng từ g ++ @ 7 dù sao chỉ là g ++ vì @ bit gây phiền nhiễu.

Sau đó, tôi đã đi đến MyProject -> Properties -> C / C ++ Build -> Settings -> GCC C ++ Compiler và thay đổi lệnh từ "g ++" thành "/ usr / local / bin / g ++". Nếu bạn quyết định không tạo liên kết tượng trưng, ​​bạn có thể cụ thể hơn.

Làm điều tương tự cho các liên kết.

Áp dụng và áp dụng và đóng. Hãy để nó xây dựng lại chỉ số. Trong một thời gian, nó cho thấy một số lỗi đáng ngại, nhưng tôi nghĩ đó là trong khi xây dựng các chỉ mục. Trong khi tôi đang tìm ra lỗi, tất cả đều biến mất mà không cần hành động gì thêm.


Tôi nghĩ rằng không cần xác minh rằng bạn cũng có thể đi vào Eclipse -> Thuộc tính -> C / C ++ -> Công cụ xây dựng lõi và chỉnh sửa chúng với các đường dẫn khác nhau, nhưng tôi không chắc điều đó sẽ làm gì.


0

Tôi đã gặp một vấn đề tương tự khi sử dụng Eclipse C ++ 2019-03 cho một dự án hỗn hợp C và C ++ sử dụng std :: tùy chọn và std :: exchange. Điều làm việc cho tôi là điều này. Trong dự án Thuộc tính-> C / C ++ Build-> Cài đặt-> Cài đặt công cụ-> Trình biên dịch chéo G ++, xóa -std = gnu ++ 17 khỏi Linh tinh và thay vào đó là Phương ngữ-> Cờ phương ngữ khác.


0

Khi sử dụng trình biên dịch chéo, tôi thường nhận được các hệ thống xây dựng tùy chỉnh nâng cao được chế tạo tỉ mỉ bởi các đồng nghiệp. Tôi sử dụng "Dự án Makefile với mã hiện tại" vì vậy hầu hết các câu trả lời khác không được áp dụng.

Khi bắt đầu dự án, tôi phải xác định rằng tôi đang sử dụng trình biên dịch chéo trong trình hướng dẫn cho "Dự án Makefile với mã hiện có". Điều khó chịu là trong khoảng 10 năm trở lại đây, nút trình biên dịch chéo trên trình hướng dẫn đó không nhắc về vị trí của trình biên dịch chéo. Vì vậy, trong một bước khắc phục sự cố C ++ và sự cố trình biên dịch chéo, tôi phải chuyển đến tab nhà cung cấp như được đề cập bởi các câu trả lời như @ravwojdyla ở trên, nhưng nhà cung cấp tôi phải chọn là nhà cung cấp trình biên dịch chéo. Sau đó, trong hộp lệnh tôi đặt đường dẫn đầy đủ đến trình biên dịch và tôi thêm -std = gnu ++ 11 cho chuẩn C ++ mà tôi muốn có hỗ trợ. Điều này làm việc ra cũng như có thể được mong đợi.

Bạn có thể làm điều này với một dự án hiện có. Điều duy nhất bạn có thể cần làm là chạy lại bộ chỉ mục.

Tôi chưa bao giờ phải thêm cờ thử nghiệm hoặc ghi đè định nghĩa của __cplusplus. Điều duy nhất là, nếu tôi có một lượng đáng kể mã C hiện đại, tôi không có nơi nào để đặt tùy chọn tiêu chuẩn cụ thể C.

Và khi mọi thứ đang thực sự kém, việc có được một bản ghi phân tích cú pháp, sử dụng lệnh đó trong menu con Indexer, có thể rất nhiều thông tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.