2012-06-23 50 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