该Makefile支持安静编译,交叉编译,增加调试信息等选项,支持自动对头文件的依赖。
Makefile:
PROG=gdbtest
#replace .c to .o of all source file and list here
#condition include like obj-$(CONFIG_XXX)+= xxx.o
obj-y=main.o
DST_DIR=/tftpboot
#host compile or cross compile
ifeq ($(HOST),y)
CROSS_COMPILE=
else
CROSS_COMPILE=mipsel-linux-
endif
CC=$(CROSS_COMPILE)gcc
STRIP=$(CROSS_COMPILE)strip
RM=rm -rf
CP=cp -f
CFLAGS=-Wall -Werror -pipe
#with or without debug info
ifeq ($(CONFIG_DEBUG),y)
CFLAGS+=-g3 -ggdb
else
CFLAGS+=-Os
endif
LDFLAGS=
#Quiet compile or not
ifeq ($(V),1)
Q=
else
Q=@
endif
all: $(PROG)
$(PROG):$(obj-y)
@$(if $Q, echo "LD $@")
$(Q)$(CC) $(LDFLAGS) -o $@ $^
%.d: %.c
@$(if $Q, echo "CHK $<")
$(Q)$(CC) -M $(CFLAGS) $< > $@.$$$$; /
sed 's,/($*/)/.o[ :]*,/1.o $@ : ,g' < $@.$$$$ > $@; /
$(RM) $@.$$$$
%.o: %.c
@$(if $Q, echo "CC $@")
$(Q)$(CC) $(CFLAGS) -c -o $@ $<
clean:
@$(if $Q, echo "CLEAN $(PROG)")
$(Q)$(RM) *.o *.d $(PROG)
install:$(PROG)
@$(if $Q, echo "INST $(PROG)")
$(Q)$(CP) $(PROG) $(DST_DIR)/
$(Q)$(STRIP) $(DST_DIR)/$(PROG)
uninstall:
@$(if $Q, echo "UNINST $(PROG)")
$(Q)$(RM) $(DST_DIR)/$(PROG)
sinclude $(obj-y:.o=.d)
源文件:
main.c
编译后的文件:gdbtest