makefile基礎命令學習隨筆

2021-10-14 02:02:25 字數 1888 閱讀 3297

所有命令要以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 ...