#wildcard : 扩展通配符 notdir : 去除路径 patsubst :替换通配符
C_SOURCES = $(foreach dir,$(SUB_DIRS),$(wildcard $(dir)/*.c))
CPP_SOURCES = $(foreach dir,$(SUB_DIRS),$(wildcard $(dir)/*.cpp))
C_RELOBJFILES = $(C_SOURCES:%.c=%.o) # % 代表通配符
CPP_RELOBJFILES = $(CPP_SOURCES:%.cpp=%.o) #或者 CPP_RELOBJFILES = $(patsubst %cpp, %o, $(CPP_SOURCES))
#定义伪目标(不是文件) make clean /make install来执行相应的命令
.PHONY: clean install
#目标文件
all: $(RELTARGET)
#目标:依赖文件
$(RELTARGET): $(C_RELOBJFILES) $(CPP_RELOBJFILES) $(COM_LIBS) $(THIRD_LIBS)
$(CPLUSPLUS) -o $@ $^ $(LDFLAGS)# $@ 代表所有目标文件 $^ 代表所有依赖文件 LDFLAGS:链接库使用的选项
#“:”代表依赖,另外每个处理动作之前都要用tab键分隔。
.c.o:
$(CC) -c $(CFLAGS) $< -o $@ # $< 代表第一个依赖文件 -c只编译生成目标文件,不链接 CFLAGS:编译的时候使用的选项
.cpp.o:
$(CPLUSPLUS) -c $(CFLAGS) $< -o $@
install:
install -d $(INSTALL_DIR)
install $(RELTARGET) $(INSTALL_DIR)
clean:
rm -f $(C_RELOBJFILES) $(CPP_RELOBJFILES) $(RELTARGET)