1.简单的makefile模板
############################################################# # Target files. ############################################################# TARGET := ############################################################# # Compiler tool ############################################################# AS := g++ LD := g++ CC := g++ AR := ar OD := objdump OBJCOPY := objcopy RM := rm -rf ############################################################ # Flags. ############################################################# CCFLAGS := -c -Wall LDFLAGS := -lpthread ############################################################# # Collect source file. ############################################################# #Collect all the *.c/*.cpp files. CS_SRC := $(wildcard ./src/*.cpp) ############################################################# # Produce object name.(Do not modify) ############################################################# CS_OBJ := $(patsubst %.cpp,%.o,$(CS_SRC)) ############################################################# # Make target. ############################################################# .PHONY:all all: $(TARGET) $(TARGET): $(CS_OBJ) $(LD) $(CS_OBJ) $(LDFLAGS) -o [email protected] %.o: %.cpp $(CC) $(CCFLAGS) $< -o [email protected] .PHONY:clean clean: $(RM) $(CS_OBJ) $(DEP_FILES) $(TARGET)
2.解释
(1)$(patsubst <pattern>,<replacement>,<text>)
功能:查找<text>中的单词(单词以“空格”、“ Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。例如:
$(patsubst %.c,%.o,x.c.c bar.c)
结果:x.c.o bar.o
可以使用另一种模式:$(var: <suffix>=<replacement>)
例如:objects = x.c.c bar.c
$(objects:.c=.o)
结果:x.c.o bar.o
(2)静态模式
<targets ...>: <target-pattern>: <prereq-patterns ...>
<commands>
...
targets 定义了一系列的目标文件,可以有通配符。是目标的一个集合。
target-parrtern 是指明了 targets 的模式,也就是的目标集模式。
prereq-parrterns 是目标的依赖模式,它对 target-parrtern 形成的模式再进行
一次依赖目标的定义。
例如:
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o [email protected]
如果我们的<target-parrtern>定义成“ %.o”,意思是我们的<target>集合中都是以“ .o”结尾
的,而如果我们的<prereq-parrterns>定义成“ %.c”,意思是对<target-parrtern>
所形成的目标集进行二次定义,其计算方法是,取<target-parrtern>模式中的“ %”(也
就是去掉了[.o]这个结尾),并为其加上[.c]这个结尾,形成的新集合。
参考《跟我一起写makefile》