Makefile的常用語法 及 規則

2021-06-09 14:53:56 字數 2197 閱讀 8222

1、wildcard : 擴充套件萬用字元

2、notdir : 去除路徑

3、patsubst :替換萬用字元

4、條件表示式的語法

*************************

例子:建立乙個測試目錄,在測試目錄下建立乙個名為sub的子目錄

$ mkdir test

$ cd test

$ mkdir sub

在test下,建立a.c和b.c ,在sub目錄下,建立sa.c和sb.c

建立乙個簡單的makefile

src=$(wildcard *.c ./sub/*.c)

dir=$(notdir $(src))

obj=$(patsubst %.c,%.o,$(dir) )

all:

@echo $(src)

@echo $(dir)

@echo $(obj)

@echo "end"

執行結果分析:

第一行輸出:

a.c b.c ./sub/sa.c ./sub/sb.c

wildcard把 指定目錄 ./ 和 ./sub/ 下的 所有字尾是c的檔案 全部 展開

第二行輸出:

a.c b.c sa.c sb.c

notdir把展開的檔案的路徑 去除掉

第三行輸出:

a.o b.o sa.o sb.o

在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的變數,符合字尾是.c的全部替換成.o,

或者可以使用

obj=$(dir:%.c=%.o)

效果也是一樣的。

********************====

4、條件表示式的語法

ifeq這個關鍵字有四個。

第乙個是我們前面所見過的「ifeq」

ifeq (, )

ifeq '' ''

ifeq "" ""

ifeq "" ''

ifeq '' ""

比較引數「arg1」和「arg2」的值是否相同。當然,引數中我們還可以使用make的函式。如:

ifeq ($(strip $(foo)),)

endif

這個示例中 使用了「strip」函式,如果這個函式的返回值是空(empty),那麼就生效。

第二個條件關鍵字是「ifneq」

ifneq (, )

ifneq '' ''

ifneq "" ""

ifneq "" ''

ifneq '' ""

其比較引數「arg1」和「arg2」的值是否相同,如果不同,則為真。和「ifeq」類似。

第三個條件關鍵字是「ifdef」

ifdef

如果變數的值非空,不為空 表示式為真。否則,表示式為假。當然,同樣可以是乙個函式的返回值。注意,ifdef只是測試乙個變數是否有值其並不會把變數擴充套件到當前位置。還是來看兩個例子:

示例一:

bar =

foo = $(bar)

ifdef foo

frobozz = yes

else

frobozz = no

endif

all:

@echo frobozz=$(frobozz)

執行 make  後,列印出來 frobozz=yes

示例二:

foo =

ifdef foo

frobozz = yes

else

frobozz = no

endif

all:

@echo frobozz=$(frobozz)

第乙個例子中,「$(frobozz)」值是「yes」,第二個則是「no」。

第四個條件關鍵字是「ifndef」

ifndef

這個我就不多說了,和「ifdef」是相反的意思。

***********************************==

Makefile的常用語法 及 規則

1 wildcard 擴充套件萬用字元 2 notdir 去除路徑 3 patsubst 替換萬用字元 4 條件表示式的語法 例子 建立乙個測試目錄,在測試目錄下建立乙個名為sub的子目錄 mkdir test cd test mkdir sub 在test下,建立a.c和b.c 在sub目錄下,建...

makefile常用語法講解一

1 make 是乙個解釋 makefile 中指令的命令工具。make 工具最主要也是最基本的功能就是通過 makefile 檔案來描述源程式之間的相互關係並自動維護編譯工作。而 makefile 檔案需要按照某種語法進行編寫,檔案中需要說明如何編譯各個原始檔並連線生成可執行檔案,並要求定義原始檔之...

mysql常用語法 MySQL常用語法

更新資料 update 表名 set 健名 更改的值 where 建 刪除資料 delete from 表名 where 索引 create index 索引名稱 on 表名 鍵名 建立試圖 create view 檢視名 鍵,鍵 as select matchno,abs won lost fro...