1. 程式人生 > >makefile中的shell語法

makefile中的shell語法

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一定要注意。