第6課 變數的高階主題(上)

2022-02-21 13:34:10 字數 3111 閱讀 7338

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 變數值的模式替換

(1)使用 % 保留變數值中的指定字元,替換其它字元,%可以替換任何字串

(2)語法格式: $(var:a%b=x%y)或 $

1

#變數的模式替換

23 src := a1b.c a2b.c a3b.c

4 obj := $

56 test :

7 @echo "obj => $(obj)"89

#輸出結果10#

obj => x1y x2y x3y

1.3 規則中的模式替換

(1)語法格式

targets: target-pattern : prereq-pattern

command1

command2

...

(2)語法含義:通過target-patterntargets中匹配子目標;再通過prereq-pattern從子目標生成依賴;進而構成完整的規則。

(3)規則中使用模式替換的意義

① 在大型的工程中 .o 檔案的數量很多,按照一般的寫法 makefile會非常繁瑣,而使用模式替換可以自動生成眾多 .o 檔案需要的規則。

② 在工程中要增添或者刪減檔案,只需要在objs變數中增添或刪減即可,非常方便。如果採用一般的寫法,要增添或刪減規則,很繁瑣

(1)乙個變數名之中可以包含對其它變數的引用

(2)巢狀引用的本質是使用乙個變數表示另外乙個變數

注意:  x := y 這裡的 y 是字元(字串)  而 y := z 中的 y 表示的是變數,這兩者是兩個東東

(1)執行 make 時,在命令列定義變數

(2)命令列變數預設覆蓋makefile 中定義的變數

(3)在實際工程中,通過命令列變數臨時改變變數的值,得到特殊的可執行程式(一般測試使用)

1

#例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)用於指示 makefile 中定義的變數不能被覆蓋(2)變數的定義和賦值都需要使用override關鍵字

1

#測試override關鍵字用法

23 override var :=test

45 test :

6 @echo "var => $(var)"78

#執行 make var=cmd9#

輸出 var => test 變數沒有被命令列變數所覆蓋

(1)用於在 makefile 中定義多行變數(2)多行變數的定義從變數名開始到endef結束

(3)可使用override關鍵字防止變數被覆蓋

(4)define定義的變數等價於使用 = 定義的變數(define賦值的方式是遞迴賦值

1

#演示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

注:本文整理於《狄泰12月提公升計畫》課程內容狄泰qq群:199546072

第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...