$(wildcard *.c)
獲取該目錄下所有的.c文件
$(addsuffix SUFFIX,NAMES)
給NAMES加上後綴SUFFIX
PS:結合以上兩個函數可以實現獲取指定目錄下的所有指定類型文件:
SRCDIR := src1 src2 src3
SRCS := $(wildcard $(addsuffix /*.cpp, $(SRCDIR))) #獲取src1 src2 src3 目錄下所有的.cpp文件
#相當於 SRCS := $(wildcard src1/*.cpp src2/*.cpp src3/*.cpp)
$(subst from,to,texts)
把字串texts中的from字符串替換成to。
$(patsubst %.c,%.o,texts)
把字符串texts中的.c替換成.o [其中,%代表任意長度的字符串]
OBJS := $(patsubst %.cpp,%.o,$(SRCS)) #將SRCS中文件的".cpp"轉化爲".o"
[例子]假設當前目錄下存在文件夾build(用來保存編譯出來的.o文件),src(用來放.cpp源文件),include(用來放.h頭文件)三個文件夾,
SRCDIR := src
SRCS := $(wildcard $(addsuffix /*.cpp, $(SRCDIR)))
OBJS := $(patsubst %.cpp,%.o,$(subst src,build,$(SRCS)))
則SRCS爲src目錄下所有.cpp文件,OBJS爲將編譯成build下的與.cpp同名的.o文件,如src/a.cpp將轉化爲build/a.
那麼編譯命令可以爲:
$(OBJS) : $(SRCS)
g++ -o $@ -c $(patsubst %.o,%.cpp, $(subst build,src,$@)) $(INCLUDE_PATH)
其中,
$(strip texts)
把texts前後的空格去掉
$(strip a b c) -> "abc"