Makefile學習----變量

變量定義

符號 說明 參考 $() 或

${} 使用變量。如果要使用字符$,需寫爲$$。

SRC = main.c

gcc  -c  $(SRC)  -o  main

= 一般變量賦值 := 變量只能使用前面已經定義的變量。

SRC  =  main.c

OBJ  :=  $(SRC) $(INC) test.c

INC    =  test1.c

#此時$(OBJ)的值爲main.c test.c

?= 如果變量沒有被定義過,則賦值。否則跳過該語句。

① SRC ?= main.c

#此時$(SRC)的值爲main.c

② SRC    =  test.c

     SRC  ?=  main.c

#此時$(SRC)的值爲test.c

變量的高級用法

表達 說明 參考 $(var:a=b)

將變量var中所有字符串 a 結尾的替換成字符串 b。

這裏結尾的標誌是 空格 或者 結束符

SRC = test1.c  test2.c  test3.c

OBJ = $(SRC:.c=.o)

#此時$(OBJ)值爲 test1.o  test2.o  test3.o

x = y

y = z

a := $($(x))

將變量的值當作變量

x = $(y)
y = z
z = Hello
a := $($(x))

#此時 $(a) 值爲 Hello,一層一層解開即可

Makefile自動化變量

符號 說明 參考 $@

1、規則中的目標文件集合。

2、在模式規則中,如果有多個目標,$@爲目標中模式定義的集合

target : obj

    @echo $@ #輸出target

gcc -o target obj

$? 所有比目標新的依賴目標的集合。

#obj1.c被修改

target : obj1 obj2 obj2 obj3

    @echo $? #輸出obj1

    @echo $^ #輸出obj1 obj2 obj3

    @echo $+ #輸出obj1 obj2 obj2 obj3

gcc -o target obj1 obj2 obj3

$^ 所有依賴目標的集合。會自動去除重複的依賴目標。 $+ 所有依賴目標的集合。不會去除重複的依賴目標。

$<

1、規則的第一個依賴文件名。

2、如果是一個目標文件使用隱含規則來重建,則它代表由隱含規則加入的第一個依賴文件。

  $%

1、當規則的目標文件是一個靜態庫文件時,代表靜態庫的一個成員名。

2、如果目標不是靜態庫文件,其值爲空。

  $ * 在模式規則和靜態模式規則中,代表“莖”。莖”是目標模式中“%”所代表的
部分。  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章