|
將makefile放入項目的頂層目錄,會自動去查找所有子目錄的c、s、S、h文件。適合小項目工程編譯,如果項目大,目錄、文件多,編譯效率會比較慢。
#*****************************************************************************
#
# Copyright 2012 UU_Dou <UU_Dou@163.com>
# Date: 2012-11-23
#
#*****************************************************************************
VERSION = 1
PATCHLEVEL = 0
SUBLEVEL = 0
PROJECT_VERSION=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)
ELF_TARGET=main.elf
ARCH = I386
CROSS_COMPILE =
COMPILE_PRIOR = -O2
COMPILE_CFLAGS = -c
DEBUG_CFLAG = -g
$(ARCH)_CFLAGS = -Wpointer-arith -Wstrict-prototypes -Wundef -pipe -Wall
CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)ar
LD = $(CROSS_COMPILE)ld
OBJDUMP = $(CROSS_COMPILE)objdump
READELF = $(CROSS_COMPILE)readelf
OBJCOPY = $(CROSS_COMPILE)objcopy
NM = $(CROSS_COMPILE)nm
RM = $(CROSS_COMPILE)rm
C_SOURCES := $(shell find ./ -name "*.c")
S_SOURCES := $(shell find ./ -name "*.[Ss]")
H_INCLUDES := $(shell find ./ -name "*.[hH]")
OBJECTS := $(subst .c,.o,$(C_SOURCES))
OBJECTS += $(subst .s,.o,$(S_SOURCES))
OBJECTS += $(subst .S,.o,$(S_SOURCES))
$(ELF_TARGET) : $(OBJECTS)
@set -e
@$(CC) $< -o $@
@echo "complie OK"
$(OBJECTS):$(C_SOURCES)
@echo "compling $(shell basename $<)"
@set -e
@$(CC) $< $($(ARCH)_CFLAGS) $(COMPILE_CFLAGS) $(COMPILE_PRIOR) $(DEBUG_CFLAG) -o $@
clean:
$(shell if [ -e $(ELF_TARGET) ]; then $(RM) $(ELF_TARGET); fi)
$(shell if [ -e $(OBJECTS) ]; then $(RM) $(OBJECTS); fi)
@echo "clean $(ELF_TARGET)"
@echo "clean $(filter %.o,$(OBJECTS))"
#makefile
|
|