2012-01-18 2 views
1

В проекте Arduino у меня есть конфигурации для компиляции и загрузки двух устройств: Arduino Mega2560 и автономного микросхемы ATmega 328P на макете. Обе конфигурации собирают, загружают и запускают на своих соответствующих устройствах, по крайней мере для независимого от устройства кода, такого как программа Hello. Но большинству программ, f/ex, blinky, нужен некоторый условный код, зависящий от устройства. Я мог бы составить и определить некоторые символы на (Project Properties> C/C++ Build> AVR Compiler (и AVR C++ Compiler)> Symbols) для каждой конфигурации, которые будут добавлены в командные строки компилятора.Eclipse: Как сделать переменные build-config доступными во время компиляции?

Но где-то в IDE часть и другие варианты, выбранные мной для каждой конфигурации, известны и назначены переменным среды в (Project Properties> C/C++ Build> Environment), а некоторые из них передаются команде компилятора -line, но не как опции -D. Я бы предпочел использовать эти существующие, поскольку 1) они создаются автоматически; 2) Я не буду опечатывать один из них по-разному для одного из компиляторов; 3) за одним и тем же соглашением могут следовать другие авторы - или мной, на каком-то другом проектном коде, более портативном.

Есть ли способ автоматизировать передачу их компилятору как #defines?

(Затмение Indigo, CrossPack-AVR-20100115, & Mac OS 10.6.8)


Edit:

Как обходным я написал сценарий предварительно сборки, который создает заголовочный файл для #define Моделировочных переменной среды:

printenv | awk 'BEGIN{print "/*** AUTO-GENERATED FILE -- DO NOT EDIT. ***/\n";} {sub(/^/, "#define "); sub(/=/, " "); print; }' >${CWD}/../src/buildtime-environment.h 



Screenshot of Build Steps dialog

Это достаточно хорошо работает с двумя оговорками:

  1. Это хрупкое - она ​​имеет «особое знание» мою структуру каталогов проекта.
  2. Наведите указатель мыши на один из этих макросов в редакторе среды разработки, средство макрообработки может отображать устаревшее значение для макроса, что может привести к преследованию призрака, если вы забудете об этом и верьте, наконечник.

(Я оставлю этот комментарий до тех пор, пока я не откажусь от поиска решения).

ответ

0

Я не нашел ссылки на это каким-либо другим способом - или каким-либо образом вообще. Таким образом, я обобщил свой шаг до сборки искать скрипт в исходном каталоге и запустить его, если он существует:

if [ -e ../src/avr-prebuild ]; then ../src/avr-prebuild;fi 

Это может делать почти все, и легко настраивается на основе каждого проекта , Он не касается ни одного из предостережений, которые я написал в своем комментарии. То, что он знает, что моя структура каталогов не страшна, и это побуждает меня поддерживать их целостность. Тот факт, что наконечник в затмении не остается в курсе, немного более серьезен, но я могу жить с ним. После того, как меня снова обманули пару раз, я, наверное, помню!

+0

Это лучшее, что я придумал до сих пор. Тем не менее, я по-прежнему открыт для других предложений. – JRobert

0

Я не могу быть уверен, что это отвечает на ваш вопрос (и я понимаю, что это старый вопрос), но вы посмотрели на вкладку «Окружающая среда» конфигурации «Запуск»? Вы можете добавить новую переменную среды на основе существующей переменной.Например, на изображении ниже у меня есть переменная подстановки строки, которую я создал с именем «sb», я могу сообщить компилятору об этой переменной, добавив ее на вкладку «Окружение» в конфигурации «Запуск». Затем внутри моего кода я мог получить значение этой переменной с помощью getenv («sb_scope»). Также он делает sb_scope доступным для процесса сборки компилятора. В общем, целью этой области является информирование любой переменной Eclipse, доступной для вашей среды хоста.

[Shameless Plug] Полное демо этого в разделе «Демо-версии: переменные замены строк» ​​модуля 3 «Переменные Eclipse» в моем курсе Pluralsight Eclipse Guided Tour Part 2. [/ Shameless подключи]

screen shot of adding new environment variable

Смежные вопросы