Gnu Makefile 阅读笔记(3)

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)

你可能感兴趣的:(Gnu Makefile 阅读笔记(3))