Makefile相關函數

$(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)

其中,@.o (patsubst %.o,%.cpp, (substbuild,src, @))爲每一個.o所對應的.cpp,如src/a.cpp將轉化爲build/a.o

$(strip texts)

把texts前後的空格去掉

$(strip a b  c) -> "abc"
發佈了27 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章