1成功:
src = $(wildcard ./*cpp) obj = $(patsubst %.cpp,%.o ,$(src))target = test$(target) : $(obj)g++ $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient %.o: %.cppg++ -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient.PHONY:clean clean:rm -f $(target) $(obj)
2.修改上方的 obj = $(patsubst %.cpp,%.o ,$(src))
為obj = $(patsubst %.cpp ,%.o ,$(src))
沒有生成.o文件,obj的值是所有.cpp后綴文件
?
3. 修改上方的 obj = $(patsubst %.cpp,%.o ,$(src))
為obj = $(patsubst %.cpp, %.o ,$(src))
成功
?
4. 修改上方的 obj = $(patsubst %.cpp,%.o ,$(src))
為obj = $(patsubst %.cpp,%.o,$(src))
成功
?
總結:patsubst函數:
格式:$(patsubst <pattern>,<replacement>,<text> )
名稱:模式字符串替換函數——patsubst。
功能:查找<text>中的單詞(單詞以“空格”、“Tab”或“回車”“換行”分隔)是否符合模式<pattern>,如果匹配的話,則以<replacement>替換。這里,<pattern>可以包括通配符“%”,表示任意長度的字串。如果<replacement>中也包含“%”,那么,<replacement>中的這個“%”將是<pattern>中的那個“%”所代表的字串。(可以用“\”來轉義,以“\%”來表示真實含義的“%”字符)
返回:函數返回被替換過后的字符串。
?
備注:
在makefile文件中可以用@echo輸出變量信息:
?
src=$(wildcard *.c ./sub/*.c)
dir=$(notdir $(src))
obj=$(patsubst %.c,%.o,$(dir) )
?
all:
@echo $(src)
@echo $(dir)
@echo $(obj)
@echo "end"