使用前需要在当前目录下建立一个obj文件夹,用来存放中间文件。*.d文件中包含了对应*.c的依赖文件,*.o文件为对应*.c文件的目标文件。
详细的Makfile资料可以看看GNU make中文手册和跟我一起写Makefile
CFLAGS=-Wall
OBJPATH=obj # .d文件和.o文件保存 路径
TARGET=demo # 最终可 执行文件
default: $(TARGET)
SOURCE=a.c b.c # 需要编译的.c文件
INCLUDE=
# 获取.d文件名集合
DEPS=$(addprefix $(OBJPATH)/, $(patsubst %.c, %.d, $(filter %.c, $(SOURCE))))
# 获取.o文件名集合
OB JS=$(addprefix $(OBJPATH)/, $(addsuffix .o, $(basename $(SOURCE))))
-include $(DEPS)
# 生成.d文件
$(OBJPATH)/%.d: %.c
$(CC) $(INCLUDE) -MM $< | sed "1s|^|$(dir $@)|" |"
sed "1{x;s|.*|$@: $<|;G;}" > $(basename $@).d
# 生成.o文件
$(OBJPATH)/%.o : %.c
$(CC) $(CFLAGS) -o $@ -c $<
# 链接成可执行文件
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
# 清理
clean:
rm -rf $(OBJPATH)/*.d $(OBJPATH)/*.o $(TARGET)