В проекте 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
Это достаточно хорошо работает с двумя оговорками:
- Это хрупкое - она имеет «особое знание» мою структуру каталогов проекта.
- Наведите указатель мыши на один из этих макросов в редакторе среды разработки, средство макрообработки может отображать устаревшее значение для макроса, что может привести к преследованию призрака, если вы забудете об этом и верьте, наконечник.
(Я оставлю этот комментарий до тех пор, пока я не откажусь от поиска решения).
Это лучшее, что я придумал до сих пор. Тем не менее, я по-прежнему открыт для других предложений. – JRobert