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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Eclipse Makefile project дефайны в мейкфайле, ifdef и индексация кода, Код за ifdef не индексируется и этих дефайнов эклипс не видит
Cosmojam
сообщение Oct 9 2013, 10:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Есть кусок кода
Код
#if SOME_VAR
void func(void);
#else

SOME_VAR определена в каком-то хэдэре, который виден эклиспу, но по каким-то причинам он не видит этот дефайн и соответственно весь код под ifdef становится ему не виден. Это страшно неудобно т.к. очень привык Ctrl+click на функции и попадать к её определению. А если она определена под таким блоком ifdef, то эклипс её не видит и приходится мучится с поиском.

Пути к инклюдам эклипс видит (дописал их в path and symbols, по ктрл+клику находит инклюды). Там же в symbols дописал эти дефайны - не помогло.

Подскажите как бороться с этим?


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 9 2013, 10:36
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



попробовать сделать переиндексацию
Go to the top of the page
 
+Quote Post
Cosmojam
сообщение Oct 9 2013, 10:55
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Цитата(сарматъ @ Oct 9 2013, 13:36) *
попробовать сделать переиндексацию

Неа, и настройки индексера менял (включал "index unused headers"). Не прокатывает


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 9 2013, 11:14
Сообщение #4


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

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



Цитата(Cosmojam @ Oct 9 2013, 16:10) *
Подскажите как бороться с этим?

Смотрите вот здесь.
(Это касаемо заголовка топика, про дефайны в makefile).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 9 2013, 11:45
Сообщение #5


Гуру
******

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



QUOTE (AHTOXA @ Oct 9 2013, 14:14) *
Смотрите вот здесь.
(Это касаемо заголовка топика, про дефайны в makefile).
Да, удобная была штука. А вот в Eclipse kepler у меня пропала напрочь. Выкусили?


--------------------
На любой вопрос даю любой ответ
"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
mdmitry
сообщение Oct 9 2013, 14:17
Сообщение #6


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Oct 9 2013, 15:45) *
Да, удобная была штука. А вот в Eclipse kepler у меня пропала напрочь. Выкусили?

Использую так:
Eclipse Kepler SR1

Project->Properties->C/C++ General->Preprocessor Include Paths, Macros etc.->Providers:

CDT GCC Built-in compiler Settings [checked]
Use providers shared between projects [unchecked]
Allocate console in the Console View [checked]
в командной строке:
make specs_file=${INPUTS} discovery

в Makefile
Код
.PHONY: discovery
discovery:
ifeq ($(CXX_PROJECT),YES)
    $(CXX) $(INCS) $(ALL_CXXFLAGS) -E -P -v -dD '$(specs_file)'
else
    $(CC) $(INCS) $(ALL_CFLAGS) -E -P -v -dD '$(specs_file)'
endif
    $(REMOVE) spec.d


Замеченные неудобства: из Makefile глобальные дефайны задаваемые в командной строке компилятора (-DSOMENAME) не распознаются. Проблем, описанных здесь не заметил.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 9 2013, 16:13
Сообщение #7


Гуру
******

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



QUOTE (mdmitry @ Oct 9 2013, 17:17) *
Использую так:
Спасибо! Сам бы не догадался. Кстати, все -D из makefile передаются.


--------------------
На любой вопрос даю любой ответ
"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
Cosmojam
сообщение Oct 9 2013, 17:56
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Цитата(AHTOXA @ Oct 9 2013, 14:14) *
Смотрите вот здесь.
(Это касаемо заголовка топика, про дефайны в makefile).

О, спасибо, пол-беды решено. А вот с дейфайнами внутри хидеров какие-то глюки индексера видимо. Некоторые нормально видит, некоторые - нет.


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
Cosmojam
сообщение Oct 10 2013, 09:17
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Кажется понял причину. В каталоге проекта есть неиспользуемые при сборке хидеры, в которых нужные символы переобъявлены. В данном случае это lwipots.h из юниттестов в составе lwip. Видимо реальный lwipopts.h индексируется раньше чем тестовый и некоторые символы оказываются переобъявлены.


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Oct 10 2013, 12:40
Сообщение #10


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Oct 9 2013, 20:13) *
Кстати, все -D из makefile передаются.

Да, передаются правильно.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 10 2013, 17:25
Сообщение #11


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Сергей Борщ @ Oct 9 2013, 14:45) *
Да, удобная была штука. А вот в Eclipse kepler у меня пропала напрочь. Выкусили?

Не выкусили, глубже зарыли (по умолчанию скрыто, но можно открыть Window->Preferences->C/C++->Property Pages Settings) и объявили deprecated.
В версии Luna обещали удалить вообще, но пока ещё наблюдаю.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 10 2013, 18:14
Сообщение #12


Гуру
******

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



QUOTE (IgorKossak @ Oct 10 2013, 20:25) *
В версии Luna обещали удалить вообще, но пока ещё наблюдаю.
Раз новый вариант мы с помощью mdmitry освоили, можно его смело забыть.


--------------------
На любой вопрос даю любой ответ
"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
сарматъ
сообщение Oct 11 2013, 05:21
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



хых... расскажите какую проблему вы тут решаете? что то я не могу уловить разницы что с этими опциями

CODE
CDT GCC Built-in compiler Settings [checked]
Use providers shared between projects [unchecked]
Allocate console in the Console View [checked]
в командной строке:
make specs_file=${INPUTS} discovery


собираю что с теми что по умолчанию...
если вставляю это в майкфайл

CODE
ifeq ($(CXX_PROJECT),YES)
$(CXX) $(INCS) $(ALL_CXXFLAGS) -E -P -v -dD '$(specs_file)'
else
$(CC) $(INCS) $(ALL_CFLAGS) -E -P -v -dD '$(specs_file)'
endif
$(REMOVE) spec.d


вообще не собирается пишет ошибку что какого то разделителя не хватает...

Сообщение отредактировал сарматъ - Oct 11 2013, 05:22
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 11 2013, 07:37
Сообщение #14


Гуру
******

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



QUOTE (сарматъ @ Oct 11 2013, 08:21) *
расскажите какую проблему вы тут решаете? что то я не могу уловить разницы
Как бы проще объяснить - в makefile задаются некие глобальные опции проекта:
1) компилятор и, следовательно, пути к его библиотечным заголовочным файлам.
2) сторонние библиотеки и, следовательно, пути поиска их заголовочных файлов.
3) Тип процессора, который может определять некие define, по которым в некоторых файлах (и заголовчных, и исходного кода) могут включаться какие-либо участки либо подключаться те или иные другие заголовочные файлы.
4) просто какие-то глобальные на весть проект #define вроде NDEBUG

Вот чтобы эклипса могла все это учитывать, правильно раскрашивать исходники и правильно осуществлять навигацию по ним, обо всех этих параметрах надо ей правильно сообщить. Можно тупо их набивать на соответствующих вкладках вручную. Но во-первых это нудно, а во-вторых при любом изменении придется править как минимум в двух местах - в makefile и на одной/нескольких вкладках Эклипсы. Это муторно и не наш метод. В эклипсе реализован автоматический механизм: она вызывает компилятор, пытками wink.gif заставляет его выдать в stdout все #define и пути, после чего анализирует и усваивает вывод. Вот чтобы компилятор выдал все что нужно с учетом наших установок в makefile мы и просим Эклипсу вызывать не голый писишный компилятор ${COMMAND} -E -P -v -dD "${INPUTS}", а определенный в нашем makefile компилятор со всеми необходимыми для нашего проекта опциями. И делаем мы это заставляя make достичь цель discovery.

QUOTE (сарматъ @ Oct 11 2013, 08:21) *
вообще не собирается пишет ошибку что какого то разделителя не хватает...
Там в начале строк табуляторы должны стоять, а не пробелы. А перед этим куском должна стоять цель discovery:
В общем у меня так:
CODE
#discovery target for Eclipse parser
.PHONY: discovery
discovery:
    $(CC) $(INCLUDES) $(CFLAGS) -E -P -v -dD '$(specs_file)'


P.S. чуть-чуть отшлифовал текст.


--------------------
На любой вопрос даю любой ответ
"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
сарматъ
сообщение Oct 11 2013, 07:40
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



понял, спасибо, буду пробовать

может там еще слова волшебные какие шепнуть надо?

у меня как был этот блок серым так и остался(

CODE
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
RCC->CR |= (uint32_t)0x00000001;
RCC->CFGR = 0x00000000;
RCC->CR &= (uint32_t)0xFEF6FFFF;
#endif


Сообщение отредактировал сарматъ - Oct 11 2013, 08:58
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st August 2025 - 18:39
Рейтинг@Mail.ru


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