makefile中的shell語法
阿新 • • 發佈:2019-02-04
1、在Makefile中只能在target中呼叫Shell指令碼,其他地方是不能輸出的。比如如下程式碼就是沒有任何輸出:
VAR="Hello" echo "$(VAR)" all: .....
以上程式碼任何時候都不會輸出,沒有在target內,如果上述程式碼改為如下:
VAR="Hello" all: echo "$(VAR)" .....
以上程式碼,在make all的時候將會執行echo命令。
最後列印結果是:
echo ""Hello""
"Hello"
2、在Makefile中執行shell命令,一行建立一個程序來執行。這也是為什麼很多Makefile中有很多行的末尾都是“; \”,以此來保證程式碼是一行而不是多行,這樣Makefile可以在一個程序中執行,例如:
SUBDIR=src example all: @for subdir in $(SUBDIR); \ do\ echo "building "; \ done
上述可以看出for迴圈中每行都是以”; \”結尾的。
3、Makefile中所有以$打頭的單詞都會被解釋成Makefile中的變數。如果你需要呼叫shell中的變數(或者正則表示式中錨定句位$),都需要加兩個$符號($$)。例項如下:
PATH="/data/" all: echo ${PATH}/*Makefile中變數,即"/data"*/ echo $$PATH /*shell中的變數*/
例子中的第一個${PATH}引用的是Makefile中的變數,而不是shell中的PATH環境變數,後者引用的事Shell中的PATH環境變數。
以上三點的是Makefile呼叫shell應該注意的地方,寫Makefile一定要注意。