所有命令要以tab鍵開頭
一、顯示命令
@字元在命令列之前,那麼,這條命令在被執行的時候將不被顯示出來
make -n
make --just-print 只顯示命令但不執行命令
make -s
make --slient 全面禁止命令的顯示
二、命令執行
三、命令出錯
區域性方法:
在makefile的命令行前新增」-「 意為不管命令是否出錯都認為是成功
全域性方法:
給make新增-i或–ignore-errors引數,整個檔案忽略所有命令錯誤
給make新增-k或–keep-going引數,某個命令出錯,但會繼續執行其他命令
四、巢狀執行make
五、定義命令包
define ***
enddef變數
變數在宣告時需要賦予初值,在使用時,需要在變數名前加上,變數
名最好使
用()或
括起來如
要使
用,變數名最好使用()或{}括起來 如要使用
,變數名最好
使用()
或括起來
如要使用
本身,則使用$$表示
變數是可以使用後面定義的變數的 用在函式中時,效率低、
使用":="操作符,前面的變數不能使用後面的定義的變數
foo?=bar
如果foo沒有被定義過,那麼foo的值就是bar,如果foo先前被定義過,那麼這條語句將什麼也不做
( va
r:a=
b)
或(var:a=b)或
(var:a
=b)或
把變數var中以a字串結尾的a替換成b字串 結尾的意思時空格或者結束符
foo:=a.o b.o c.o
bar:=$(foo:%.o=%.c)
靜態模式,依賴於被替換的字串中有相同的模式,模式中必須包含乙個"%"字元。
使用+=給變數追加值
如果該變數前面沒有定義過,+=就變成=,否則就繼承前一次的賦值操作符
override
ifeq\else\endif
函式:引數間以逗號「,「分隔,而函式名和引數之間以空格分隔。函式呼叫以」$「開頭,以圓括號或花括號把函式名和引數括起來。
$(subst ,,
) 字串替換函式
$(patsubst ,,
) 模式字串替換函式
$(strip ) 去空格函式(開頭和結尾)
$(findstring ,) 查詢字串函式
$(filter ,
) 過濾函式
$(filter-out ,
) 反過濾函式
$(sort ) 排序函式(公升序)
$(word ,
) 取單詞函式(取出第n個word)
$(wordlist ,,
) 取單詞串函式(取出從m到n的單詞串)
$(words
) 單詞個數統計函式
$(firstword
) 首單詞函式
檔名操作函式:
$(dir ) 取目錄函式
$(notdir ) 取檔案函式
$(suffix ) 取字尾函式
$(basename ) 取字首函式
$(addsuffix ) 加字尾函式
$(addprefix ) 加字首函式
$(join ,) 連線函式
$(foreach ,,
) list的遍歷賦值給var,text中執行包含var的函式
$(if ,,) else可已沒有,若為假,返回空
$(call ,,,…) param依次替代expression中的變數
$(origin ) 輸出變數所在位置
makefile學習筆記 makefile概述
20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...
Makefile基礎 變數
這一節我們詳細看看makefile中關於變數的語法規則。先看乙個簡單的例子 foo bar bar huh?all echo foo 我們執行make將會打出huh?當make讀到foo bar 時,確定foo的值是 bar 但並不立即展開 bar 然後讀到bar huh?確定bar的值是huh?然...
Makefile基礎講解
1 makefile基本語法 在makefile中我們經常看到 這幾個賦值運算子,那麼他們有什麼區別呢?我們來做個簡單的實驗 新建乙個makefile,內容為 ifdef define vre vre hello world else endif ifeq opt define vre hello ...