makefile中的shell語法

2021-09-07 01:38:00 字數 1626 閱讀 6487

在makefile中寫shell**有點詭異,和不同的shell語法不太一樣,如果不了解,看makefile會莫名其妙。下面總結了一些。

1:盡在makefile檔案的目標項冒號後的另起一行的**才是shell**。

eg:

xx = xx1         // 這裡時makefile**

yy:xx = xx2   // 這是是makefile**,makefile允許變數賦值時,'='號兩邊留空格

yy:

xx=xx3 // 只有這裡是shell** ,shell不允許『=』號兩邊有空格哦。

有乙個例外:

xx=$(shell 這裡的**也是shell**)

2:makefile中的shell,每一行是乙個程序,不同行之間變數值不能傳遞。所以,makefile中的shell不管多長也要寫在一行。

eg:

subdir=src example

all:

@for subdir in $(subdir); /      // 這裡往下是一行shell

do/echo "building " $$subdir; /

done

1、在makefile中只能在target中呼叫shell指令碼,其他地方是不能輸出的。比如如下**就是沒有任何輸出:

var="hello"

echo "$var"

all:

.....

以上**任何時候都不會輸出,沒有在target內,如果上述**改為如下:

var="hello"

all:

echo "$var"

.....

以上**,在make all的時候將會執行echo命令。

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 $

echo $$path

例子中的第乙個$引用的是makefile中的變數,而不是shell中的path環境變數,後者引用的事shell中的path環境變數。

dirs = src bin lib

all:

@for i in $(dirs); /

do /

echo " " $$i; /

done

dirs是makefile變數,i是shell變數

以上三點的是makefile呼叫shell應該注意的地方,寫makefile一定要注意。

原文:

Makefile中新增shell指令碼

makefile中可以加入shell指令碼語言,但是編寫形式不一樣,makefile中都是以行為單位的,所以必須將makefile中的shell指令碼通過 連線成一行。例如 if d hisi home src sdk modify hidrv v0a1 source osdrv kernel li...

Makefile中的變數和shell變數

我們在寫makefile時 多多少少會用到shell指令碼,對於變數的在shell中的使用有一些要注意的細節。讓我們從乙個簡單的makefile來看看。注意makefile中一定要有乙個目標,且一定要有乙個終極目標,若想要有多個目標應該設立乙個偽目標。如下 all hello hello2 hell...

Makefile 和 shell中的環境變數使用

makefile中可以通過 var 或者 的方式使用變數,詳細的講述大家可以參考 之前我一直以為這兩是一樣的,沒啥區別,直到我遇到了問題。因專案需求,需要移植lighttpd到arm平台,過程中需要設定toolchain的位置,如下 cd cc gcc ar ar ld ld strip strip...