1.1 變數值的普通替換
(1)使用指定字元(串)替換變數值中的字尾字元(串)
(2)語法格式:$(var:a=b)或$
11.2 變數值的模式替換#變數的普通替換(替換字尾)
23 src := a.cc b.cc c.cc
4 obj := $
56 test :
7 @echo "obj => $(obj)"89
#輸出結果10#
obj => a.o b.o c.o
(1)使用 % 保留變數值中的指定字元,替換其它字元,%可以替換任何字串
(2)語法格式: $(var:a%b=x%y)或 $
11.3 規則中的模式替換#變數的模式替換
23 src := a1b.c a2b.c a3b.c
4 obj := $
56 test :
7 @echo "obj => $(obj)"89
#輸出結果10#
obj => x1y x2y x3y
(1)語法格式
targets: target-pattern : prereq-pattern
command1
command2
...
(2)語法含義:通過target-pattern從targets中匹配子目標;再通過prereq-pattern從子目標生成依賴;進而構成完整的規則。
(3)規則中使用模式替換的意義
① 在大型的工程中 .o 檔案的數量很多,按照一般的寫法 makefile會非常繁瑣,而使用模式替換可以自動生成眾多 .o 檔案需要的規則。
② 在工程中要增添或者刪減檔案,只需要在objs變數中增添或刪減即可,非常方便。如果採用一般的寫法,要增添或刪減規則,很繁瑣。
(1)乙個變數名之中可以包含對其它變數的引用
(2)巢狀引用的本質是使用乙個變數表示另外乙個變數
注意: x := y 這裡的 y 是字元(字串) 而 y := z 中的 y 表示的是變數,這兩者是兩個東東。
(1)執行 make 時,在命令列定義變數
(2)命令列變數預設覆蓋makefile 中定義的變數
(3)在實際工程中,通過命令列變數臨時改變變數的值,得到特殊的可執行程式(一般測試使用)
1(1)用於指示 makefile 中定義的變數不能被覆蓋(2)變數的定義和賦值都需要使用override關鍵字#例1:make 中的命令列變數
23 test :
4echo "hm => $(line)"56
#執行 make hm=swj7#
輸出 hm => swj89
#例2:make中的命令列變數
1011 hm :=hello makefile
1213 test :
14echo "hm => $(hm)"
1516
#執行 make hm=cmd17#
輸出 hm => cmd ,覆蓋了makefile中原本定義的 hm 變數
1(1)用於在 makefile 中定義多行變數(2)多行變數的定義從變數名開始到endef結束#測試override關鍵字用法
23 override var :=test
45 test :
6 @echo "var => $(var)"78
#執行 make var=cmd9#
輸出 var => test 變數沒有被命令列變數所覆蓋
(3)可使用override關鍵字防止變數被覆蓋
(4)define定義的變數等價於使用 = 定義的變數(define賦值的方式是遞迴賦值)
1注:本文整理於《狄泰12月提公升計畫》課程內容狄泰qq群:199546072#演示define 的功能23
define
foo4 i'm fool!
5endef67
override define cmd
8@echo "run cmd ls ..." # 命令前面留tab,直觀表達
9@ls
10endef
1112
test :
13@echo "foo => $(foo)"
14 $ # 這裡的 $ 前面必須有tab
第6課 變數的高階主題(上)
1.1 變數值的普通替換 1 使用指定字元 串 替換變數值中的字尾字元 串 2 語法格式 var a b 或 1 變數的普通替換 替換字尾 23 src a.cc b.cc c.cc 4 obj 56 test 7 echo obj obj 89 輸出結果10 obj a.o b.o c.o 1.2...
makefile專題 變數的高階主題(上)
cc gcc target hello.out objs func.o main.o const.o target objs cc o objs o c cc o c phony clean rebuild all rebuild clean all all target clean rm o ta...
07 變數的高階主題(下)
2.目標變數 區域性變數 3.模式變數 4.總結 home variable test echo home home 執行結果 makefile檔案 v1 variable 1 v2 variable 2 export e v export variable home system home tes...