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

Eclipse Makefile project дефайны в мейкфайле, ifdef и индексация кода

Цель discovery является целью только для Eclipse. Eclipse получает информацию о путях для заголовочных файлов и всех объявленных define. Результат работы влияет на навигацию по проекту и подсветку синтаксиса. Вполне логично, что цель строится при изменении исходных кодов проекта. У себя не замечал частых вызовов.

Это я понял. Когда эклипс вызывает эту команду? При изменении файлов исходного кода этого не происходит. Сейчас заметил что при сборке проекта тоже не происходит. Хочется заставить эклипс это делать автоматом.

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


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

Когда эклипс вызывает эту команду? При изменении файлов исходного кода этого не происходит. Сейчас заметил что при сборке проекта тоже не происходит. Хочется заставить эклипс это делать автоматом.

Первый запуск будет после заполнения настроек в Eclipse для цели discovery. Clear Entries, Apply вызывает перестроение зависимостей.

Для постоянного вызова можно включить discovery в цель all, но зачем это?

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


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

Первый запуск будет после заполнения настроек в Eclipse для цели discovery. Clear Entries, Apply вызывает перестроение зависимостей.

Для постоянного вызова можно включить discovery в цель all, но зачем это?

После внесения изменений каких либо дефайнов в исходниках эклипс этого не замечает. И продолжает ругаться что где-то, что-то не определено, хотя сборка происходит корректно.

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


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

После внесения изменений каких либо дефайнов в исходниках эклипс этого не замечает. И продолжает ругаться что где-то, что-то не определено, хотя сборка происходит корректно.

сейчас проверил на тестовом проекте. Изменил специально один define для условной компиляции. После пересборки подсвечиваются необходимые ветки условной компиляции.

Как Вы настраиваете Eclipse и какой Makefile?

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


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

сейчас проверил на тестовом проекте. Изменил специально один define для условной компиляции. После пересборки подсвечиваются необходимые ветки условной компиляции.

Как Вы настраиваете Eclipse и какой Makefile?

 

Настраивал как вы рекомендовали в этой ветке.

В разделе C/C++ Generel->Preprocessor Include/Providers

галка CDTGCC Built-in Compiler Settings

команда make specs_file=${INPUTS} discovery

галка Allocate console in the concole view

 

Остальные галки сняты

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


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

Во вкладке Providers у меня отмечены некоторые настройки:

 

CDT User Setting Entries

CDT Managed Build Setting Entries [shared]

CDT GCC Build Output Parser

 

Настройки там не менялись.

 

В Makefile изменения идеалогически правильно делать как указал IgorKossak.

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


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

Я понял, что на вкладке Providers достаточно оставить только CDT GCC Build-in compiler settings без галки "Use global provider shared between projects" (с ней эклипс пытается выполнить команду черт знает в какой директории и не находит там нужного makefile). CDT GCC Build Output Parser добавляет установки (директории заголовочных файлов, по умолчанию предопределенные символы и т.д.) от системного компилятора, которые абсолютно не нужны при кросс-компиляции.

 

Если память не изменяет, цель discovery вызывается не только после build, но еще и при принудительной переиндексации проекта (Project->C/C++ Index -> Rebuild).

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


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

Если память не изменяет, цель discovery вызывается не только после build, но еще и при принудительной переиндексации проекта (Project->C/C++ Index -> Rebuild).

 

Никак не пойму. Она у меня только вызывается при изменении настроек. При ребилде не вызывается. При переиндексации тоже.

 

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


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

Window->Preferences->C/C++->Indexer

+ Automatically update the index

+ Update index immediately after every file-save

 

Всё абсолютно верно.

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


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

Window->Preferences->C/C++->Indexer

+ Automatically update the index

+ Update index immediately after every file-save

 

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

 

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


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

CDT GCC Build Output Parser добавляет установки (директории заголовочных файлов, по умолчанию предопределенные символы и т.д.) от системного компилятора, которые абсолютно не нужны при кросс-компиляции.

У меня выбран, но при просмотре найденных путей и define нет ничего от системного компилятора (mingw32-gcc), под linux не проверял. Позже посмотрю. А если не влият, то и не надо лишних действий, и можно отключить.

 

Window->Preferences->C/C++->Indexer

+ Automatically update the index

+ Update index immediately after every file-save

Так это вроде как по умолчанию выбрано.

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


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

Я тут наконец-то дозрел до перехода на Luna. Вспомнил про эту тему, проштудировал.

Давайте я для потомков подытожу:

 

Настройка обнаружения дефайнов в Eclipse Kepler и более поздних

 

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

  • Снимаем все прички в списке "Providers";
  • Ставим причку на "CDT GCC Built-in compiler settings";
  • В настройках этого провайдера:

    • снимаем птичку "Use global provider shared between projects";

    • в строке "Command to get compiler specs" прописываем:

      make extension="${EXT}" specs_file="${INPUTS}" discovery

  • В makefile создаём цель для дисковеринга:

    #  specs_file has extension "C" for C++ and "c" for C.
    discovery:
    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
        $(RM) spec.d

  • Если вдруг индексация не выполняется при изменении файлов проекта, зайти в

    Window->Preferences->C/C++->Indexer

    и проверить установку следующих птичек :

    • Automatically update the index

    • Update index immediately after every file-save

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


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

По поводу индексации Антоха сказал всё правильно, но этого бывает не достаточно. Например, после изменения пути к тулчейну, изменения дефайнов в мейкфайле, и т. д.

Для обновления состояния проекта надо ещё провести "редискаверинг" - в настройках провайдера CDT GCC Built-in compiler settings нажать кнопку Clear Entries, потом Apply и наконец OK.

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


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

Я тут наконец-то дозрел до перехода на Luna. Вспомнил про эту тему, проштудировал.

Давайте я для потомков подытожу:

 

можно увидеть Ваш вывод в консоль при вызове Index->Rebuild ?

 

не могу добиться стабильности на Luna - во первых команда Index->Rebuild ничего на консоль не выводит, манипуляция Properties->Providers->Clear Entries->Apply(OK) работает через раз (на консоль выводит, entries обновляет, завершается, правда, цель discovery с ошибкой) - перезапуск среды помогает.

 

23:12:08 **** Running scanner discovery: CDT GCC Built-in Compiler Settings ****
make extension=C specs_file=D:/Prog/EclipseWS/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.C discovery 
COMSPEC detected C:\Windows\system32\cmd.exe 
SHELL is C:/Windows/system32/cmd.exe, REMOVE_CMD is cs-rm
-- discovery for "C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2014q4\bin"\arm-none-eabi-gcc
"C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2014q4\bin"\arm-none-eabi-gcc "C:/Program Files (x86)/GNU Tools ARM Embedded/4.9 2014q4/arm-none-eabi/include" . ./cmsis  -ggdb -Os -mcpu=cortex-m0 -mthumb-interwork   -DVECT_TAB_FLASH -DFLASH_RUN -DLPC1114 -DLPC1114_TK -I. -I./cmsis -I. -ffunction-sections -fdata-sections -Wall -Wextra -Wcast-align -Wpointer-arith -Wredundant-decls -Wshadow -Wcast-qual -Wcast-align -Wa,-adhlns= -E -P -v -dD 'D:/Prog/EclipseWS/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.C'
arm-none-eabi-gcc: error: 'D:/Prog/EclipseWS/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.C': Invalid argument
Using built-in specs.
COLLECT_GCC=C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2014q4\bin\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,armv7-r
Thread model: single
gcc version 4.9.3 20141119 (release) [ARM/embedded-4_9-branch revision 218278] (GNU Tools for ARM Embedded Processors) 
make: *** [discovery] Error 1

23:12:08 Build Finished (took 187ms)

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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