Linux下针对含有子目录的makefile文件的编写模板
CC=g++
CCFLAGS=-Wall -std=c++11
TARGET=webserver
#提取子目录
SUBDIR=$(shell ls -d */)
#提取子目录中所有扩展名为.cpp的文件
SUBSRC=$(shell find $(SUBDIR) -name '*.cpp')
#将子目录中扩展名为.cpp的文件转换成扩展名.o的文件
SUBOBJ=$(SUBSRC: %.cpp = %.o)
#提取根目录下的扩展名为.cpp的文件
ROOTSRC=$(wildcard *.cpp)
#将根目录下扩展名为.cpp的文件转换成扩展名.o的文件
ROOTOBJ=$(ROOTSRC: %.cpp = %.o)
$(TARGET) : $(ROOTSRC) $(SUBSRC)
$(CC) $(CCFLAGS) -o $@ $^
.cpp.o:
$(CC) $(CCFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -rf *.o $(TARGET)