這次的試驗,只有乙個makefile,別的沒有任何檔案,通過乙個偽目標show來演示變數的使用,好奇葩啊。
[plain]view plain
copy
cc=gcc
src=a.c b.c
.phony:show
show:
@echo $(cc)
@echo $(src)
執行make show,將會顯示
[plain]view plain
copy
gcc
a.c b.c
so easy。。。
echo前面為什麼要加上@呢?
[plain]view plain
copy
.phony:reason
reason:
@echo "with @"
echo "without @"
我們執行make reason,將會輸出:
[plain]view plain
copy
with @
echo "without @"
without @
原來如此,不加@的話,會把本條命令完整的顯示出來,然後再顯示輸出的內容。加上@之後,就只會顯示真正要被輸出的內容。
還有,makefile中的變數類似於c語言中的巨集,只是簡單的文字替換。
[plain]view plain
copy
city=henan
school=zzti
info=$(city)-$(school)
.phony:show
show:
@echo $(info)
執行makeshow的話,將會輸出:
[plain]view plain
copy
henan-zzti
但是,有一種情況給人這種感覺「難道真的是簡單的文字替換???」
我們在目錄內新增兩個檔案a.c和b.c,不用寫任何內容。
[plain]view plain
copy
src=*.c
.phony:show
show:
@echo $(src)
執行make show,反正我第一感覺是輸出*.c,但是實際輸出令我****。
[plain]view plain
copy
a.c b.c
這個問題令小弟想了好久,搞不明白。知道膝蓋中了一劍。
其實,makefile中的變數還真的是文字替換,因為@echo $(src)*****@echo *.c
但是,恰好是echo犯病了,把*當做萬用字元,把本目錄內所有以.c結尾的檔案都輸出了。
可以試一下,直接在終端執行echo *.c,輸出的就是a.c和b.c。
下面的例子也是證據:
[plain]view plain
copy
src=*.c
realsrc=a.c b.c
.phony:show
show:
echo $(src)
@echo "-------------"
echo $(realsrc)
注意只有中間的乙個echo加了@,輸出結果為:
[plain]view plain
copy
echo *.c
a.c b.c
-------------
echo a.c b.c
a.c b.c
echo $(src)===echo *.c
所以先輸出echo *.c,然後輸出a.c b.c
echo $(realsrc)===echo a.c b.c
試驗證明:makefile中的巨集還真的是簡單的文字替換。
Makefile的內部變數
curdir是makefile的內嵌變數,顯示當前路徑 表示目標檔案的名稱,包含副檔名 表示所有的依賴檔案,以空格隔開,不重複 表示第乙個依賴檔案的名稱 表示所有的依賴檔案,空格隔開,可以重複 表示目標檔案的名稱,不包含副檔名 依賴項中,所有比目標檔案新的依賴檔案 cc c語言編譯器的名稱 cpp ...
makefile變數的定義
一 變數名 makefile變數名是不包括 前置空白和尾空白的任何字串。1 變數名最好由字母 數字和下劃線組成 儘管在gnu make中沒有對變數的命名有其它的限制,但是字母 數字和下劃線以外的字元 可能會在make的後續版本中被賦予特殊的含義。2 變數名大小寫敏感 3 變數名中可以包含函式或者其它...
Makefile中的變數
makefile中的變數 2010年03月25日 b makefile b b 中的變數 b b b b b b 在makefile中,變數就是乙個名字 像是c語言中的巨集 代表乙個文字字串 變數的值 在makefile的目標 依賴 命令中引用乙個變數的地方,變數會被它的值所取代 與c語言中巨集引用...