0

我有一个用于编译 Arduino 程序的 makefile

我需要根据一些逻辑在一些文件的开头添加一些文本。我为此使用echo命令。

ECHO    = echo

后来在文件中,我有很多地方像

$(OBJDIR)/%.cpp: %.pde
    $(ECHO) '#if ARDUINO >= 100\n    #include "Arduino.h"\n#else\n    #include "WProgram.h"\n#endif' > $@

效果很好。

最近,一些用户抱怨 echo 命令在某些 linux 发行版中无法正常工作,我不得不在 echo 命令中添加 '-e' 选项。

所以我将声明命令的第一行更改为

ECHO    = echo -e

这不起作用,因为 makefile 将 -e 视为文本的一部分,而不是选项的一部分。

编辑

我没有收到任何错误,但文本 -e 也附加到我正在创建的文件中。

有没有办法将 -e 声明为选项而不是文本的一部分?

4

2 回答 2

2

您很可能会看到行为差异,因为echo在某些 shell 的某些版本中是 shell 内置命令。然后这是复杂的,因为 make 有时只使用 shell 来调用命令——如果可能的话,它会更喜欢直接调用命令。因此,有时,在某些系统上,您并没有调用echo您认为的命令。

通过设置你可能会有更好的运气

ECHO = /bin/echo -e

它将显式调用外部echo命令,即使 shell 具有内置版本。这样你应该得到一致的结果。

于 2012-06-23T06:50:13.063 回答
1

如果得到/bin/sh: 1: -e: not found错误它与您的外壳有关,而不是 makefile.else,请输入您的错误。当然,如果你得到错误。

于 2012-06-23T06:02:29.160 回答