реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Хочется странного, Подсветка синтаксиса в Eclipse
nanorobot
сообщение Apr 22 2015, 15:34
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



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

Сообщение отредактировал nanorobot - Apr 22 2015, 16:45
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 22 2015, 18:37
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Это не странное, этого все хотятsm.gif Вот ссылка.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Apr 23 2015, 03:48
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



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



Сообщение отредактировал nanorobot - Apr 23 2015, 06:28
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 23 2015, 04:44
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(nanorobot @ Apr 23 2015, 06:48) *
Чет пока не выходит.
Что-то делаете неправильно. Прикрепленное изображение


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Apr 23 2015, 06:28
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Сергей Борщ @ 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


какой файл оно не находит?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 23 2015, 09:26
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Apr 23 2015, 10:21
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(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


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

Сообщение отредактировал nanorobot - Apr 23 2015, 10:41
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 23 2015, 10:46
Сообщение #8


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Apr 23 2015, 11:12
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



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


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


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



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

Сообщение отредактировал nanorobot - Apr 23 2015, 11:13
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 23 2015, 12:01
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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".
После этого всё должно переиндексироваться и появиться.



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Apr 23 2015, 12:15
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



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


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

Сообщение отредактировал nanorobot - Apr 23 2015, 12:18
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Apr 24 2015, 05:01
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Благодарю Антоху и Сергея Борща за помощь. Индексация работает, да. Но собирает только пути тулчейна, абсолютные. Относительные пути внутри проекта не подхватываются(переменная INCDIR в Makefile, в цель Discovery передается). Макросы передаваемые программе директивой -D работают(влияют на компиляцию), как задумано. Но не подсвечиваются. Данная тема много раз поднималась на форуме, но не увидел, что бы кем то она была окончательно решена. Не там искал?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 24 2015, 06:10
Сообщение #13


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Apr 24 2015, 09:49
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(AHTOXA @ Apr 24 2015, 11:10) *
Всё же вы что-то не так делаете. У меня всё работает.
Посмотрите на мой makefile, может увидите какую-нибудь мелочь.


Антоха, спасибо за помощь. По Вашему Makefile разобрался. причина - INCS := $(patsubst %, -I "%", $(INCDIR)). я скармливал просто INCDIR.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение May 25 2015, 07:12
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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

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

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


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

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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016