在makefile中,支持程序設計語言中變量的概念,全部的變量只表明文本數據。
ide
1、變量的定義和使用
測試
#變量的定義 CC := gcc TARGET := hello.out #變量的使用 $(TARGET) : func.o main.o $(CC) -o $(TARGET) func.o main.o
2、變量的賦值方式spa
1. 簡單賦值 :=操作系統
只針對當前語句的變量有效
命令行
2. 遞歸賦值 =
設計
賦值操做可能影響多個其餘變量,全部與目標變量相關的其餘變量都將受到影響
3d
3. 條件賦值 ?=
blog
若是變量未定義,使用賦值符號中的值定義變量,若是已定義,賦值無效遞歸
4. 追加賦值 +=
作用域
原變量值以後加上一個新值,原變量值和新值之間由空格隔開
3、預約義變量
一、自動變量
$@ 當前規則中觸發命令被執行的目標
$^ 當前規則中的全部依賴
$< 當前規則中的第一個依賴
1.1 自動變量的使用
二、特殊變量
這部分根據須要再去查詢make手冊
4、變量的高級用法
一、變量值的替換
1.1 使用指定字符替換變量值中的後綴字符
1.2 語法格式:$(var:a=b)或${var:a=b}
2. 變量的模式替換
2.1 使用%保留變量值中的指定字符,替換其餘字符
2.2 語法格式: $(var:a=b)或${var:a=b}
3. 測試代碼
src1 := a.cc b.cc c.cc obj1 := $(src1:cc=o) test1 : @echo "obj1 => $(obj1)" src2 := a11b.c a22b.c a33b.c obj2 := $(src2:a%b.c=x%y) test2 : @echo "obj2 => $(obj2)"
四、規則中的模式替換
示例以下:
能夠當作下面的代碼
func.o main.o : %.o : %.c gcc -o $@ -c $^
分別進行匹配事後,就獲得了圖中的結果
五、變量值的嵌套引用
5.1 一個變量名之中能夠包含對其餘變量的引用
5.2 嵌套引用的本質是使用一個變量表示另一個變量
六、命令行變量
6.1 運行make時,在命令行定義變量
6.2 命令行變量默認覆蓋makefile中定義的變量
7. override關鍵字
使用override關鍵字之後,makefile中定義的變量不會由於make的命令行變量而改變
八、define關鍵字
定義多行變量時,使用define關鍵字,同時能夠配合override關鍵字防止變量被覆蓋,
define定義的變量等價於使用=定義的變量
九、環境變量
環境變量是操做系統自己的變量,makefile能夠直接使用這些變量,但若是在makefile中定義了同名變量,那麼將在當前的makefile中覆蓋環境變量。運行make時。指定-e選項,能夠優先使用環境變量
十、變量在不一樣makefile之間的傳遞方式
10.1 直接在外部定義環境變量進行傳遞
10.2 使用export定義變量進行傳遞
10.3 定義make命令行變量進行傳遞
十一、目標變量
做用域只在指定目標及連帶規則中
var := D.T.Software new := TDelphi test : var := test-var %e : override new := test-new test : another @echo "test :" @echo "var => $(var)" @echo "new => $(new)" another : @echo "another :" @echo "var => $(var)" @echo "new => $(new)"
運行結果以下:
因爲another和test存在依賴關係,所以,定義的局部變量也會對another生效
十二、模式變量
模式變量是目標變量的擴展,能夠根據相應的規則,找到符合規則的目標
交流QQ羣:199546072