在嵌入式開發過程當中,常常和Makefile打交道,今天總結下Makefile中最經常使用的三個函數:ide
一、wildcard:擴展通配符函數函數
常常能夠看到這樣的用法src=$(wildcard *.c),匹配全部.c文件,列表賦值給srcspa
二、notdir:去掉目標的路徑函數開發
常常能夠看到這樣用dir=$(notdir $(wildcard ./sub/*.c)),目的是去除掉./sub/ 路徑it
三、patsubst:替換通配符函數class
常常能夠看到這樣用obj=$(patsubst %.c,%.o,$(wildcard *.c)),目的是將.c文件替換.otest
下面舉例說明三個函數的用法:擴展
1)建立目錄test :mkdir testfile
2)test下建立兩個文件a.c b.c:touch a.c b.c總結
3)test下建立sub目錄:mkdir sub
4)sub下建立兩個文件sa.c sb.c:touch sa.c sb.c
5)test建立Makefile文件
src=$(wildcard *.c ./sub/*.c) dir=$(notdir $(wildcard *.c ./sub/*c)) obj=$(patsubst %.c,%.o,$(dir)) all: @echo $(src) tdir: @echo $(dir) tobj: @echo $(obj)
運行結果:
1)make all或者make(默認make匹配 all僞目標)
a.c b.c ./sub/sa.c ./sub/sb.c
2)make tdir
a.c b.c sa.c sb.c
3)make tobj
a.o b.o sa.o sb.o
另外:@echo 和echo 的區別:前者隱藏命令,後者不隱藏命令
若是將@去掉後運行結果:
1)make all或者make
echo a.c b.c ./sub/sa.c ./sub/sb.c
a.c b.c ./sub/sa.c ./sub/sb.c
2)make tdir
echo a.c b.c sa.c sb.c
a.c b.c sa.c sb.c
3)make tobj
echo a.o b.o sa.o sb.o
a.o b.o sa.o sb.o