Eclipse CDT indexer - как решить неразрешенные

У меня есть рабочее пространство с несколькими проектами, которые все компилируются без проблем. Однако некоторые из проектов дают много предупреждений в редакторе о неразрешенных символах из-за неразрешенных включений. Большинство из них являются заголовками других проектов в рабочей области или сторонних библиотек.

Googling предполагает, что это проблема с индексом, но я не нашел каких-либо последовательных объяснений, как это исправить. Я полагаю, мне нужно добавить пути к этим библиотекам в индекс PATH, но я не вижу любой вариант сделать это (я использую Juno).

Может кто-нибудь объяснить мне, как настроить CDT-указатель?

Я также не знаю, как включить предупреждения для заголовков STL в двух проектах. Некоторые заголовки STL разрешены, но другие - нет, и список не кажется одинаковым между двумя проектами (такие вещи, как вектор и iostream, но не sstream или string, другие не обнаруживают iostream).

Возможно, это релевантно: это проекты на С++, но все расширения файлов -.c. Я сменил команду GCC C Compiler на "g++", чтобы скомпилировать их, но я думаю, мне также нужно что-то сделать с настройками индексатора, чтобы справиться с этим?

Ответ 1

Хорошо, поэтому я исправил эту проблему.

  • Неразрешенные включены из других проектов в рабочей области, а сторонние библиотеки были решены путем добавления других проектов в качестве ссылок. Я предполагаю, что компилятор знал, где искать, потому что я добавил места в список Includes, но индексатор не сделал (возможно, из-за затмения только заголовки обработки один раз?)

  • Неразрешенный включает в себя STL I, измененный всеми моими .c файлами, которые на самом деле были С++ для .cpp. Недостаточно просто сменить команду компиляции на "g++", чтобы сказать, что индексщик рассматривает проект как С++.

В случае 1) мне нужно сначала очистить/перестроить индекс проектов, на которые ссылаются, чтобы удалить неразрешенные ошибки include.

Ответ 2

Щелкните правой кнопкой мыши свой проект в рабочей области, выберите PropertiesC++ GeneralPaths and Symbols, затем добавьте в него дополнительные символы и символы для своего конкретного компилятора, добавьте библиотеки и другие необходимые материалы на вкладках. После этого нажмите Apply - он должен начать повторную индексацию, и ваши проблемы не исчезнут.

Ответ 3

У меня была аналогичная проблема, в которой мой проект будет строиться, но показал, что в Eclipse Kepler не было разрешено.

В моем случае я взял существующий проект ARM и создал настраиваемую конфигурацию сборки, в которой использовалась другая цепочка инструментов. В новую конфигурацию сборки были включены все правильные версии, поэтому проект был создан правильно, но индекс не собирал его.

Я исправил это, установив индекс для использования конфигурации активной сборки. В Window- > Preferences- > C/С++ → Indexer, в разделе "Конфигурация сборки для индексатора" я выбрал "Использовать конфигурацию активной сборки", и он очистил его.

Ответ 4

Все ответы полезны, но есть еще один трюк, который решил мою проблему. Я узнал, что в отличие от компилятора индексщик не обрабатывает подкаталоги включенных путей. Поэтому вам нужно быть более конкретным при включении файлов заголовков.

Пример
#include "подкаталог\include_2.h"