Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Хочется странного
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
nanorobot
Хочется подсветки синтаксиса (препроцессора) в зависимости от значений макросов, передаваемых программе из Makefile директивой -D
пока что оно либо не работает вовсе, либо с точностью до наоборот: фрагменты исходников, разрешенные макросом - затеняются, запрещенные - подсвечиваются
AHTOXA
Это не странное, этого все хотятsm.gif Вот ссылка.
nanorobot
Благодарю. Чет пока не выходит.

Сергей Борщ
Цитата(nanorobot @ Apr 23 2015, 06:48) *
Чет пока не выходит.
Что-то делаете неправильно. Нажмите для просмотра прикрепленного файла
nanorobot
Цитата(Сергей Борщ @ Apr 23 2015, 09:44) *



Увы, есть проблемы с пониманием процесса. Проведение описанных по ссылке действий, вообще не привело к какому либо наблюдаемому результату.
создал в проекте таргет discovery - кликнул, в итоге получил:

Код
make -j2 discovery
-- discovery for
g++   -E -P -v -dD ''
process_begin: CreateProcess(NULL, g++ -E -P -v -dD "", ...) failed.
make (e=2): Не удается найти указанный файл.

make: *** [discovery] Error 2


видимо он считает что проект с плюсами
закомментил:

Код
#ifeq ($(extension),c)
    @echo -- discovery for $(CC)
    $(CC) $(INCS) $(CFLAGS) -E -P -v -dD '$(specs_file)'
#else
#    @echo -- discovery for $(CCX)
#    $(CXX) $(INCS) $(CXXFLAGS) -E -P -v -dD '$(specs_file)'
#endif



кликнул по таргету discovery, получил

Код
make -j2 discovery
-- discovery for arm-none-eabi-gcc
arm-none-eabi-gcc  -mcpu=cortex-m4 -O3 -ggdb -fomit-frame-pointer -falign-functions=16 -ffunction-sections -fdata-sections -fno-common -flto  -Wall -Wextra -Wstrict-prototypes -Wa,-alms=build/lst/ -DCORTEX_VTOR_INIT=0x20000000 -DRTOS_NIL -DCORTEX_USE_FPU=FALSE  -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -MD -MP -MF .dep/discovery.d -E -P -v -dD ''
arm-none-eabi-gcc: error: : No such file or directory
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
Target: arm-none-eabi
Configured with: /home/build/work/GCC-4-9-build/src/gcc/configure --build=i686-linux-gnu --host=i686-w64-mingw32 --target=arm-none-eabi --prefix=/home/build/work/GCC-4-9-build/install-mingw --libexecdir=/home/build/work/GCC-4-9-build/install-mingw/lib --infodir=/home/build/work/GCC-4-9-build/install-mingw/share/doc/gcc-arm-none-eabi/info --mandir=/home/build/work/GCC-4-9-build/install-mingw/share/doc/gcc-arm-none-eabi/man --htmldir=/home/build/work/GCC-4-9-build/install-mingw/share/doc/gcc-arm-none-eabi/html --pdfdir=/home/build/work/GCC-4-9-build/install-mingw/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-headers=yes --with-newlib --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/home/build/work/GCC-4-9-build/install-mingw/arm-none-eabi --with-libiconv-prefix=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-gmp=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-mpfr=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-mpc=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-isl=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-cloog=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-libelf=/home/build/work/GCC-4-9-build/build-mingw/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' --with-multilib-list=armv6-m,armv7-m,armv7e-m,cortex-m7,armv7-r
Thread model: single
gcc version 4.9.3 20150303 (release) [ARM/embedded-4_9-branch revision 221220] (GNU Tools for ARM Embedded Processors)
rm -f spec.d


какой файл оно не находит?
AHTOXA
Во-первых, у вас в makefile не задана переменная CCX. Поэтому пишет "-- discovery for".
Во-вторых, просто кликать по discovery неправильно, потому что эта цель ожидает параметров. Эту цель дёргает сама эклипса.

Попробуйте после того, как всё настроите, перезапустить эклипсу, потом очистить собранные пути
(Project->Properties->C/C++ General->Preprocessor Include Paths, Macros etc.->Providers, выбрать "CDT GCC Built-in compiler settings", нажать "Clear entries".
После этого всё должно переиндексироваться и появиться.
nanorobot
Цитата(AHTOXA @ Apr 23 2015, 14:26) *
После этого всё должно переиндексироваться и появиться.


Ув. Антоха. Благодарю за помощь, в основном работает. Но есть некоторые неясности. Не могли бы Вы, проиллюстрировать один момент:

В зависимости от значения некоторой переменной(макроса? тэга?) в Makefile, в сишном исходнике вызывать тот или иной хидер.

ну, условно говоря, в си-исходнике:


Код
#ifdef RTOS_SCMRTOS
#include"scmRtos.h"
#endif

#ifdef RTOS_FREERTOS
#include"freeRtos.h"
#endif



или

Код
#if RTOS == SCM_RTOS
#include"scmRtos.h"
#elif RTOS == FREE_RTOS
#include"freeRtos.h"
#endif



как будет выглядеть соответствующий фрагмент скрипта в Makefile.

Мой вариант работает, но вот с корректной подсветкой/затемнением - проблема(оба вызова хидеров затенены)
для первого варианта выше.

Код
ifeq ($(RTOS),)
  RTOS = SCM_RTOS
endif


ifeq ($(RTOS), SCM_RTOS)
    DDEFS    += -DRTOS_SCMRTOS
endif    

ifeq ($(RTOS), FREE_RTOS)
    DDEFS    += -DRTOS_FREERTOS
endif


повторюсь, ситуация с хидерами - условна. Интересует сама механика.
AHTOXA
Да всё правильно у вас, я сам делаю точно так же. Вы не забываете передавать DDEFS компилятору в цели discovery?
nanorobot
Цитата(AHTOXA @ Apr 23 2015, 15:46) *
Да всё правильно у вас, я сам делаю точно так же. Вы не забываете передавать DDEFS компилятору в цели discovery?


Не забываю. Но проблема с затенением/подсветкой имеет место. Оба вызова хидеров затенены. Но работает все как надо.


... в цели discovery? нет. это как?



.... уже передаю. не помогает. и после index rebuild не помогает.
Сергей Борщ
Цитата(nanorobot @ Apr 23 2015, 14:12) *
.... уже передаю. не помогает. и после index rebuild не помогает.

После изменения makefile надо заново запускать discovery, простая переиндексация не помогает:
Цитата(AHTOXA @ Apr 23 2015, 12:26) *
(Project->Properties->C/C++ General->Preprocessor Include Paths, Macros etc.->Providers, выбрать "CDT GCC Built-in compiler settings", нажать "Clear entries".
После этого всё должно переиндексироваться и появиться.

nanorobot
Цитата(Сергей Борщ @ Apr 23 2015, 17:01) *
После изменения makefile надо заново запускать discovery, простая переиндексация не помогает:


перезапуск это наше все. Во всех случаях. Все равно. Речь только об достаточно узкой проблеме. все остальное ок. Правда оно тянет за собой все прочие ошибки парсинга, что весьма неприятно
nanorobot
Благодарю Антоху и Сергея Борща за помощь. Индексация работает, да. Но собирает только пути тулчейна, абсолютные. Относительные пути внутри проекта не подхватываются(переменная INCDIR в Makefile, в цель Discovery передается). Макросы передаваемые программе директивой -D работают(влияют на компиляцию), как задумано. Но не подсвечиваются. Данная тема много раз поднималась на форуме, но не увидел, что бы кем то она была окончательно решена. Не там искал?
AHTOXA
Всё же вы что-то не так делаете. У меня всё работает.
Посмотрите на мой makefile, может увидите какую-нибудь мелочь.
nanorobot
Цитата(AHTOXA @ Apr 24 2015, 11:10) *
Всё же вы что-то не так делаете. У меня всё работает.
Посмотрите на мой makefile, может увидите какую-нибудь мелочь.


Антоха, спасибо за помощь. По Вашему Makefile разобрался. причина - INCS := $(patsubst %, -I "%", $(INCDIR)). я скармливал просто INCDIR.
esaulenka
Ещё один вопрос почти в тему.

Eclipse Luna не понимает новомодную инициализацию структур

Код
struct AStruct
{
int a;
int b;
}

AStruct =
{
.a = 1,
.b = 2,
};


Парсер такую конструкцию не ест. Компилятор понимает. Где у него галка?..

Что спросить у гугла, не придумал :-)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2018 Invision Power Services, Inc.