Прочитав
это, попытался сделать для Eclipse Juno SR1 по аналогии с
этим сообщением Сергея Борща.
Отличия: попытался сделать как рекомендуют разработчики, т.е. без "Discovery Options".
В качестве тестового проекта были использованы примеры от ScmRtos для lpc17xx.
Действия:
1. Запуск eclipse, выбор места для workspace. File->New->Makefile Project with Existing Code.
2. Project->Properties.
3. C/C++ General->Preprocessor Include Paths, Mfcros etc.
4. Вкладка Providers. Выбрал все варианты (поставил галки).
Подробности настроек:
4.1.
CDT User Settings Entries: выбрано только
Enable language settings providers for this project. В группе
Language Settings Provider Options ничего не выбрано.
4.2.
CDT Managed Build Settings Entries [ Shared ]: выбрано только
Enable language settings providers for this project. Группа
Language Settings Provider Options недоступна.
4.3.
CDT GCC Build Output Parser: выбрано
Enable language settings providers for this project. В группе
Language Settings Provider Options заполнено по умолчанию
Compiler command pattern: (gcc)|([gc]\+\+)|(clang), радиокнопка в
Container to keep discovered entries "
File" и выбрано
Use heuristics to resolve paths.
4.4.
CDT GCC Builtin Compiler Settings: выбрано
Enable language settings providers for this project. В группе
Language Settings Provider Options обязательно выбрать
Allocate console in the console View. Остальное не выбрано. Поле "
Command to get compiler specs" заполнено так:
make discovery5. Apply, Ok.
У меня не получилось (наверно руки кривые) сделать по полной аналогии. Возникли проблемы с переменными окружения ($(specs_file)).
Сделал изменения в makefile:
Код
#discovery target for Eclipse parser
.PHONY: discovery
discovery:
@echo > dummyspec.c
$(CC) $(INCS) $(CFLAGS) -E -P -v -dD dummyspec.c
$(RM) dummyspec.*
# dependencies
ifeq (,$(findstring build,$(MAKECMDGOALS)))
ifeq (,$(findstring clean,$(MAKECMDGOALS)))
ifeq (,$(findstring dirs,$(MAKECMDGOALS)))
ifeq (,$(findstring discovery,$(MAKECMDGOALS)))
-include $(wildcard $(OBJDIR)/*.d)
endif
endif
endif
endif
Не заработало!
Выяснил, что не распознаются относительные пути из $(INCS). При этом все определения (в makefile) и пути компилятора добавляются в eclipse. Замена BASE = . на абсолютный путь к проекту и добавение переменной, определяющую абсолютные значения путей к SCMDIR и COMMON привели к положительному результату.
Запись путей была только с прямыми слэшами, как пути в linux (не родные для Win), иначе не собирался проект с помощью make из командной строки (WinXp).
Проверено на WinXp и linux (SLCE 5.2). Причем в linux путь к компилятору указывался в makefile (TOOL), так как в переменных окружения его не было.
Вопрос: как заставить парсер определить на основе относительного пути полный, считая текщим положение makefile? Наверное, что при использовании Scons можно использовать pwd и получить для цели discovery необходимые полные пути. Как это сделать для make пока не думал.
To ReAl:
Похоже, что в srec_cat версии 1.61 поменялись ключи и на строку из makefile было предупреждение (под linux).