makefile學習之路——變量

        在makefile中,支持程序設計語言中變量的概念,全部的變量只表明文本數據。
ide

1、變量的定義和使用
測試

#變量的定義
CC := gcc
TARGET := hello.out

#變量的使用
$(TARGET) : func.o main.o
    $(CC) -o $(TARGET) func.o main.o

        

2、變量的賦值方式spa

    1. 簡單賦值        :=操作系統

        只針對當前語句的變量有效
命令行

    image.png


    2. 遞歸賦值        =
設計

    賦值操做可能影響多個其餘變量,全部與目標變量相關的其餘變量都將受到影響
3d

image.png

    3. 條件賦值        ?=
blog

    若是變量未定義,使用賦值符號中的值定義變量,若是已定義,賦值無效遞歸

image.png


    4. 追加賦值        +=
作用域

    原變量值以後加上一個新值,原變量值和新值之間由空格隔開

image.png


3、預約義變量

一、自動變量

$@   當前規則中觸發命令被執行的目標

$^    當前規則中的全部依賴  

$<    當前規則中的第一個依賴

1.1  自動變量的使用

image.png

image.png


二、特殊變量

這部分根據須要再去查詢make手冊


4、變量的高級用法

   一、變量值的替換

    1.1 使用指定字符替換變量值中的後綴字符

    1.2 語法格式:$(var:a=b)或${var:a=b}

image.png


   2. 變量的模式替換

    2.1 使用%保留變量值中的指定字符,替換其餘字符

    2.2 語法格式: $(var:a=b)或${var:a=b}

image.png

    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)"

    image.png


四、規則中的模式替換

image.png

示例以下:


image.png

能夠當作下面的代碼

func.o main.o : %.o : %.c
    gcc -o $@ -c $^

分別進行匹配事後,就獲得了圖中的結果


五、變量值的嵌套引用

    5.1 一個變量名之中能夠包含對其餘變量的引用

    5.2 嵌套引用的本質是使用一個變量表示另一個變量

image.png


六、命令行變量

    6.1 運行make時,在命令行定義變量

image.png

    6.2 命令行變量默認覆蓋makefile中定義的變量

image.png


7. override關鍵字

        使用override關鍵字之後,makefile中定義的變量不會由於make的命令行變量而改變

image.png

八、define關鍵字

    定義多行變量時,使用define關鍵字,同時能夠配合override關鍵字防止變量被覆蓋,

define定義的變量等價於使用=定義的變量

image.png


九、環境變量

    環境變量是操做系統自己的變量,makefile能夠直接使用這些變量,但若是在makefile中定義了同名變量,那麼將在當前的makefile中覆蓋環境變量。運行make時。指定-e選項,能夠優先使用環境變量



十、變量在不一樣makefile之間的傳遞方式

    10.1 直接在外部定義環境變量進行傳遞

    10.2 使用export定義變量進行傳遞

    10.3 定義make命令行變量進行傳遞    


十一、目標變量

    做用域只在指定目標及連帶規則中

image.png

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)"

運行結果以下:

image.png

因爲another和test存在依賴關係,所以,定義的局部變量也會對another生效


十二、模式變量

    模式變量是目標變量的擴展,能夠根據相應的規則,找到符合規則的目標

image.png




交流QQ羣:199546072

相關文章
相關標籤/搜索