3 makefile中的變數和模式規則

2021-10-08 09:02:26 字數 2191 閱讀 7368

此文編寫主要參考韋東山老師教程和《跟我一起寫makefile》和正點原子教程

makefile中的變數可以看成有3種變數,即時變數、延時變數、自動化變數,並且為了簡化程式也引入了模式規則,下面就對這些變數和模式規則做簡單介紹。

1、即時變數:

a := *** # a的值即刻確定,在定義時即確定,其中#為注釋。

對於即時變數使用「:=」表示,它的值在定義的時候已經被確定了

2、延時變數

b = *** # b的值使用到時才確定

對於延時變數使用「=」表示。它只有在使用到的時候才確定,在定義/等於時並沒有確定下來。

使用變數的時候使用「$」來引用,如果不想看到命令,可以在命令的前面加上"@"符號,就不會顯示命令本身。當我們執行make命令的時候,make這個指令本身,會把整個makefile讀進去,進行全部分析,然後解析裡面的變數。常用的變數的定義如下:

:= # 即時變數

= # 延時變數

?= # 延時變數, 如果是第1次定義才起效, 如果在前面該變數已定義則忽略這句

+= #追加, 它是即時變數還是延時變數取決於前面的定義

?=:如果這個變數在前面已經被定義了,這句話就不會起效果

(1)makefile 的變數也就是乙個字串,理解成 c語言中的巨集可能會更好。

object=main.o a.o 

object+=b.o#追加

test:$(object)

gcc -o test

$(object)

main.o:main.c

gcc -c main.c -o main.o

a.o:a.c

gcc -c a.c -o a.o

b.o:b.c

gcc -c b.c -o b.o

clean:

rm *.o test

分析:當使用變數後**就變得清晰多了,而且易於維護和修改,就如同c語言中的巨集定義一樣,如果有新的.o檔案加入,只需要修改一下object檔案就可以了。

(2)對常用變數的理解

a :=

$(c)

b =$(c)

c = abc

#d = 100ask

d ?= weidongshan

all:

@echo a =

$(a)

@echo b =

$(b)

@echo d =

$(d)

c += 123

執行:

make

結果:a =

b = abc 123

d = weidongshan

分析:d ?= weidongshan: d變數在前面沒有定義,所以d的值為weidongshan,如果在前面新增d = 100ask,最後d的值為100ask。

我們還可以通過命令列存入變數的值 例如:

執行:make d=123456

裡面的d ?= weidongshan這句話就不起作用了。

結果:a =

解析:

(1)模式規則

我們可以使用模式規則來定義乙個隱含規則。乙個模式規則就好像乙個一般的規則,只是在規則中,目標的定義需要有「%」字元。「%」的意思是表示乙個或多個任意字元。在依賴目標中同樣可以使用「%」,只是依賴目標中的「%」的取值,取決於其目標。模式規則中,至少在規則的目標定義中要包含「%」,否則,就是一般的規則。

(2)模式規則中,目標和依賴都是一系列的檔案,每一次對模式規則進行解析的時候都會是不同的目標和依賴檔案,而命令只有一行,如何通過一行命令來從不同的依賴檔案中生成對應的目標?自動化變數就是完成這個功能的!所謂自動化變數就是這種變數會把模式中所

定義的一系列的檔案自動的挨個取出,直至所有的符合模式的檔案都取完,自動化變數只應該出現在規則的命令中,常用的自動化變數如下表所示:

Makefile中的變數和shell變數

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

Makefile中的變數

makefile中的變數 2010年03月25日 b makefile b b 中的變數 b b b b b b 在makefile中,變數就是乙個名字 像是c語言中的巨集 代表乙個文字字串 變數的值 在makefile的目標 依賴 命令中引用乙個變數的地方,變數會被它的值所取代 與c語言中巨集引用...

make和Makefile中的規則和變數

make機制的執行環境需要乙個命令列程式make和乙個文字檔案makefile。make命令執行後有3個退出碼 make的使用格式是 make options target options為make工具的引數選項,target為makefile中指定的目標。make 工具的引數選項 選項含義 f f...