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

Command line 使用makefile中的选项调用外部命令,command-line,makefile,echo,arduino,Command Line,Makefile,Echo,Arduino,我有一本书 我需要根据一些逻辑在一些文件的开头添加一些文本。我正在使用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命令

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声明为选项而不是文本的一部分?

如果get
/bin/sh:1:-e:notfound
错误它与您的shell相关,而不是makefile。否则,请输入您的错误。当然,如果你有错误

如果get
/bin/sh:1:-e:notfound
错误,它与您的shell相关,而不是makefile。否则,请输入您的错误。当然,如果你有错误

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

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

ECHO = /bin/echo -e

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

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

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

ECHO = /bin/echo -e

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

我已经更新了问题。我没有收到任何错误,但文本-e也被附加到我正在创建的文件中。@Sudar我从echo的手册页中找到了以下文本:,这不是您的问题您的shell可能有自己的echo版本,它通常会取代此处描述的版本。有关shell支持的选项的详细信息,请参阅shell的文档。我已经更新了这个问题。我没有收到任何错误,但文本-e也被附加到我正在创建的文件中。@Sudar我从echo的手册页中找到了以下文本:,这不是您的问题您的shell可能有自己的echo版本,它通常会取代此处描述的版本。有关shell支持的选项的详细信息,请参阅shell的文档。谢谢您的帮助。但我不确定,这是否会对Mac OS产生任何问题。还需要在那里进行测试。谢谢,这解决了问题。但我不确定,这是否会对Mac OS产生任何问题。我们也需要在那里进行测试。