2012-06-23 27 views
0

我有一个makefile for compiling Arduino programs用makefile中的选项调用外部命令

我需要在一些基于某些逻辑的文件的开头添加一些文本。我正在使用echo命令。

ECHO = echo 

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

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

工作正常。

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

因此,我改变,我宣布命令

ECHO = echo -e 

这不是工作的第一线,因为生成文件认为-e作为文本的一部分,而不是作为选项的一部分。

编辑

我没有得到任何错误,但文本-e也被附加到我创建的文件。

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

回答

2

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

你可能会通过设置

ECHO = /bin/echo -e 

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

+0

谢谢你解决它。但我不确定这是否会对Mac OS有任何问题。还需要在那里测试它。 – Sudar

1

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

+0

我已经更新了这个问题。我没有收到任何错误,但是文本-e也被附加到我正在创建的文件中。 – Sudar

+0

@Sudar我在echo的手册页中发现了以下文本:,这不是你的问题**你的shell可能有它自己的echo版本,它通常取代这里描述的版本。请参阅你的shell的文档,了解它支持的选项的细节。** – PersianGulf