Eclipse:如何在编译时使build-config变量可用?

时间:2012-01-18 17:38:09

标签: eclipse

在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



Screenshot of Build Steps dialog

它有两个警告:

  1. 它很脆弱 - 它具有我项目目录结构的“特殊知识”。
  2. 在IDE编辑器中将鼠标悬停在其中一个宏上时,宏扩展工具提示可能会显示宏的过期值,如果您忘记了这一点,可能会导致您追逐鬼魂并相信该工具 - 尖端。
  3. (除非我放弃寻找解决方案,否则我会留下评论。

2 个答案:

答案 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”剪辑中有完整的演示。 [/无耻插头]

screen shot of adding new environment variable