在Arduino项目中,我构建了可编译和下载两个设备的配置:Arduino Mega2560和面包板上的独立ATmega 328P DIP芯片。两个配置都在各自的设备上编译,下载和运行,至少对于像Hello程序这样的设备无关代码。但大多数程序,f / ex,blinky,需要一些条件设备相关的代码。我可以在每个配置上组合并定义一些符号(项目属性> C / C ++构建> AVR编译器(和AVR C ++编译器)>符号),这些符号将被添加到编译器命令行中。
但是在IDE中的某个地方,我为每个配置选择的部分和其他选项是已知的,并在(项目属性> C / C ++构建>环境)中分配给环境变量,其中一些在编译器上传递命令行但不是-D选项。我更喜欢使用这些现有的1)它们是自动创建的; 2)对于其中一个编译器,我不会对其中一个进行不同的拼写错误; 3)其他作者可以遵循相同的惯例 - 或者由我在其他项目中遵循 - 使代码更具可移植性。
有没有办法自动将它们作为#defines传递给编译器?
(Eclipse Indigo,CrossPack-AVR-20100115,& Mac OS 10.6.8)
编辑:
作为一种解决方法,我编写了一个预构建脚本,用于创建头文件以#define构建时环境变量:
printenv | awk 'BEGIN{print "/*** AUTO-GENERATED FILE -- DO NOT EDIT. ***/\n";} {sub(/^/, "#define "); sub(/=/, " "); print; }' >${CWD}/../src/buildtime-environment.h
它有两个警告:
(除非我放弃寻找解决方案,否则我会留下评论。
答案 0 :(得分:0)
我还没有找到任何其他方式的提法 - 或者任何方式,真的。所以我推广了我的预构建步骤,在源目录中查找脚本并运行它(如果存在):
if [ -e ../src/avr-prebuild ]; then ../src/avr-prebuild;fi
这几乎可以做任何事情,并且可以在每个项目的基础上轻松定制。它没有解决我在评论中写的任何一个警告。它知道我的目录结构并不可怕,它鼓励我保持它们的一致性。日食中的工具提示不能保持最新的事实有点严重,但我可以忍受它。在我被愚弄了几次之后,我可能会记得!
答案 1 :(得分:0)
我不能确定这会回答你的问题(我意识到这是一个老问题),但是你看过Run配置的Environment选项卡了吗?您可以根据现有变量添加新的环境变量。例如,在下面的图像中,我有一个名为“sb”的字符串替换变量,我可以让编译器通过将其添加到Run配置的Environment选项卡来了解该变量。然后在我的代码中,我可以使用getenv(“sb_scope”)获取此变量的值。它还使sb_scope可用于编译器构建过程。一般而言,此区域的目的是使Eclipse知道的任何变量都可用于主机操作系统环境。
[无耻插件]在我的Pluralsight课程Eclipse Guided Tour Part 2中,模块3“Eclipse变量”的“Demo:String Substitution Variables”剪辑中有完整的演示。 [/无耻插头]