2012-08-30 2 views
11

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

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

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

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

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

ответ

6

Итак, теперь я исправил эту проблему.

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

  2. Неразрешенный включает в себя STL I, все мои файлы .c, которые на самом деле были C++ для .cpp. Просто изменить команду компиляции на «g ++», очевидно, было недостаточно, чтобы проиндексировать индекс для обработки проекта как C++.

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

+1

(Примечание: работа с ароматом QNX Momentics для Eclipse CDT.) У нас есть целая структура каталогов классов интерфейса, которые мы не размещали никаких проектов. На основе этого ответа я создал один проект на уровне «интерфейса», который включал заголовки и источник для всех подпапок. Добавление проекта этой папки в качестве ссылки на проект фиксировало неразрешенные включенные И вдруг мои ошибки и предупреждения все предоставляют ссылки! (Я сказал, что этот проект перестанет строить первую ошибку, что позволяет мне избежать длительных сроков компиляции.) – sage

5

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

+2

Спасибо за ваш ответ Александр. К сожалению, мне это, похоже, не помогает - список в разделе «Свойства»> «Общие»> «Контуры и символы», кажется, является зеркалом списка в разделе «Настройки C/C++»> «Настройки инструмента»> «Включает», который у меня был уже заполненными путями к каталогам включения, необходимым для компиляции проекта. Однако индексщик по-прежнему выдает предупреждения о недопустимых включениях в заголовки в этих каталогах. – jam

+0

Вы можете попробовать следующее: щелкните правой кнопкой мыши свой проект «Свойства» -> «Индекс» и попробуйте варианты: «Восстановить», «Обновить с измененными файлами», «Освежить все файлы», «Поиск неразрешенных включений» , Обычно варианты 2 и 3 исправляют мои проблемы. –

+1

Я уже перестроил свой индекс, но спасибо за предложение. Я считаю, что, возможно, это взломало это - я заметил, что неразрешенные включенные в один проект фактически перечислены под названием одного из других проектов. Итак, я добавил этот проект в качестве ссылки, перестроил индекс, и теперь он говорит, что 0 неразрешенных включает. Посмотрите, работает ли это исправление для всех моих проектов и добавьте его в качестве ответа, если да :) – jam

3

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

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

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

0

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

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

Смежные вопросы