Перейти к содержанию
    

Хочется подсветки синтаксиса (препроцессора) в зависимости от значений макросов, передаваемых программе из Makefile директивой -D

пока что оно либо не работает вовсе, либо с точностью до наоборот: фрагменты исходников, разрешенные макросом - затеняются, запрещенные - подсвечиваются

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Благодарю. Чет пока не выходит.

 

 

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чет пока не выходит.
Что-то делаете неправильно. post-17095-1429764268.gif

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то делаете неправильно. post-17095-1429764268.gif

 

 

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

создал в проекте таргет 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

 

какой файл оно не находит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, у вас в makefile не задана переменная CCX. Поэтому пишет "-- discovery for".

Во-вторых, просто кликать по discovery неправильно, потому что эта цель ожидает параметров. Эту цель дёргает сама эклипса.

 

Попробуйте после того, как всё настроите, перезапустить эклипсу, потом очистить собранные пути

(Project->Properties->C/C++ General->Preprocessor Include Paths, Macros etc.->Providers, выбрать "CDT GCC Built-in compiler settings", нажать "Clear entries".

После этого всё должно переиндексироваться и появиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После этого всё должно переиндексироваться и появиться.

 

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

 

В зависимости от значения некоторой переменной(макроса? тэга?) в 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

 

повторюсь, ситуация с хидерами - условна. Интересует сама механика.

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да всё правильно у вас, я сам делаю точно так же. Вы не забываете передавать DDEFS компилятору в цели discovery?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да всё правильно у вас, я сам делаю точно так же. Вы не забываете передавать DDEFS компилятору в цели discovery?

 

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

 

 

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

 

 

 

.... уже передаю. не помогает. и после index rebuild не помогает.

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.... уже передаю. не помогает. и после index rebuild не помогает.

После изменения makefile надо заново запускать discovery, простая переиндексация не помогает:

(Project->Properties->C/C++ General->Preprocessor Include Paths, Macros etc.->Providers, выбрать "CDT GCC Built-in compiler settings", нажать "Clear entries".

После этого всё должно переиндексироваться и появиться.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После изменения makefile надо заново запускать discovery, простая переиндексация не помогает:

 

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Благодарю Антоху и Сергея Борща за помощь. Индексация работает, да. Но собирает только пути тулчейна, абсолютные. Относительные пути внутри проекта не подхватываются(переменная INCDIR в Makefile, в цель Discovery передается). Макросы передаваемые программе директивой -D работают(влияют на компиляцию), как задумано. Но не подсвечиваются. Данная тема много раз поднималась на форуме, но не увидел, что бы кем то она была окончательно решена. Не там искал?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё же вы что-то не так делаете. У меня всё работает.

Посмотрите на мой makefile, может увидите какую-нибудь мелочь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё же вы что-то не так делаете. У меня всё работает.

Посмотрите на мой makefile, может увидите какую-нибудь мелочь.

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё один вопрос почти в тему.

 

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

 

struct AStruct
{
int a;
int b;
}

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

 

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

 

Что спросить у гугла, не придумал :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...