标题: 实用型makefile模版 [打印本页]

作者: liuda    时间: 2015-1-23 19:16
标题: 实用型makefile模版
将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






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1