|
|
  |
Eclipse Makefile project дефайны в мейкфайле, ifdef и индексация кода, Код за ifdef не индексируется и этих дефайнов эклипс не видит |
|
|
|
Oct 9 2013, 10:10
|
Местный
  
Группа: Свой
Сообщений: 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; | блог тут
|
|
|
|
|
Oct 9 2013, 10:55
|
Местный
  
Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182

|
Цитата(сарматъ @ Oct 9 2013, 13:36)  попробовать сделать переиндексацию Неа, и настройки индексера менял (включал "index unused headers"). Не прокатывает
--------------------
typedef enum { no, yes, maybe } bool; | блог тут
|
|
|
|
|
Oct 9 2013, 11:14
|

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

|
Цитата(Cosmojam @ Oct 9 2013, 16:10)  Подскажите как бороться с этим? Смотрите вот здесь. (Это касаемо заголовка топика, про дефайны в makefile).
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Oct 9 2013, 11:45
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Oct 9 2013, 14:17
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 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) не распознаются. Проблем, описанных здесь не заметил.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Oct 9 2013, 17:56
|
Местный
  
Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182

|
Цитата(AHTOXA @ Oct 9 2013, 14:14)  Смотрите вот здесь. (Это касаемо заголовка топика, про дефайны в makefile). О, спасибо, пол-беды решено. А вот с дейфайнами внутри хидеров какие-то глюки индексера видимо. Некоторые нормально видит, некоторые - нет.
--------------------
typedef enum { no, yes, maybe } bool; | блог тут
|
|
|
|
|
Oct 10 2013, 18:14
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Oct 11 2013, 05:21
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Oct 11 2013, 07:37
|

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

|
QUOTE (сарматъ @ Oct 11 2013, 08:21)  расскажите какую проблему вы тут решаете? что то я не могу уловить разницы Как бы проще объяснить - в makefile задаются некие глобальные опции проекта: 1) компилятор и, следовательно, пути к его библиотечным заголовочным файлам. 2) сторонние библиотеки и, следовательно, пути поиска их заголовочных файлов. 3) Тип процессора, который может определять некие define, по которым в некоторых файлах (и заголовчных, и исходного кода) могут включаться какие-либо участки либо подключаться те или иные другие заголовочные файлы. 4) просто какие-то глобальные на весть проект #define вроде NDEBUG Вот чтобы эклипса могла все это учитывать, правильно раскрашивать исходники и правильно осуществлять навигацию по ним, обо всех этих параметрах надо ей правильно сообщить. Можно тупо их набивать на соответствующих вкладках вручную. Но во-первых это нудно, а во-вторых при любом изменении придется править как минимум в двух местах - в makefile и на одной/нескольких вкладках Эклипсы. Это муторно и не наш метод. В эклипсе реализован автоматический механизм: она вызывает компилятор, пытками  заставляет его выдать в 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)
|
|
|
|
|
Oct 11 2013, 07:40
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|