使用makefile中的选项调用外部命令

时间:2012-06-23 05:31:11

标签: command-line makefile echo arduino

我有makefile for compiling Arduino programs

我需要根据某些逻辑在某些文件的开头添加一些文本。我正在使用 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声明为选项而不是文本的一部分?

2 个答案:

答案 0 :(得分:2)

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

通过设置

你可能会有更好的运气
ECHO = /bin/echo -e

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

答案 1 :(得分:1)

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