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...