Makefile模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
CROSS_COMPILE ?= arm-linux-gnueabihf-
CC := $(CROSS_COMPILE)gcc
CXX := $(CROSS_COMPILE)g++
AR := $(CROSS_COMPILE)ar
LD := $(CROSS_COMPILE)ld
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump

ARFLAGS := rcs
DEBUG := -g
FLAGS := -Wall -nostdlib -c -O2 -fno-builtin
CFLAGS := $(FLAGS) -std=c99
CXXFLAGS := $(FLAGS) -std=c++11
SFLAGS := $(FLAGS)
LDFLAGS := -Timx6ul.lds
LIBS := -lgcc
LIB_PATH := -L /home/chengs/imx6ull/tool/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/4.9.4
OUTPUT := /var/tmp/output

SOURCE_DIR += imx6ul
SOURCE_DIR += project
SOURCE_DIR += bsp/clk
SOURCE_DIR += bsp/delay
SOURCE_DIR += bsp/led
SOURCE_DIR += bsp/beep
SOURCE_DIR += bsp/gpio
SOURCE_DIR += bsp/key
SOURCE_DIR += bsp/int
SOURCE_DIR += bsp/exti
SOURCE_DIR += bsp/epittimer
SOURCE_DIR += bsp/uart

INCLUDES := $(patsubst %, -I %, $(SOURCE_DIR))
SOURCES += $(foreach dir, $(SOURCE_DIR), $(wildcard $(dir)/*.S))
SOURCES += $(foreach dir, $(SOURCE_DIR), $(wildcard $(dir)/*.c))
SOURCES += $(foreach dir, $(SOURCE_DIR), $(wildcard $(dir)/*.cpp))
OBJS := $(patsubst %.c, $(OUTPUT)/%.o, $(SOURCES))
OBJS := $(patsubst %.cpp, $(OUTPUT)/%.o, $(OBJS))
OBJS := $(patsubst %.S, $(OUTPUT)/%.o, $(OBJS))

VERSION := 0.1
PROJECT_NAME := app
TARGET := $(OUTPUT)/$(PROJECT_NAME)
STATIC_LIB := $(OUTPUT)/lib$(PROJECT_NAME).a.$(VERSION)
SHARED_LIB := $(OUTPUT)/lib$(PROJECT_NAME).so.$(VERSION)

all: clean $(TARGET)
$(OBJCOPY) -O binary -S $(TARGET) $(TARGET).bin
$(OBJDUMP) -D -m arm $(TARGET) > project/app.dis
imxdownload $(TARGET).bin /dev/usbSdCard
@rm -rf $(TARGET).dis $(TARGET).bin load.imx

$(TARGET): $(OBJS)
$(LD) $(LDFLAGS) -o $(TARGET) $(OBJS) $(LIBS) $(LIB_PATH)

$(STATIC_LIB): $(OBJS)
$(AR) $(ARFLAGS) $(STATIC_LIB) $(OBJS)

$(SHARED_LIB): $(OBJS)
$(CC) -fPIC -shared -o $(SHARED_LIB) $(OBJS)

$(OUTPUT)/%.o: %.c
@echo $(CC) $<
@mkdir -p $(dir $@)
@$(CC) $(CFLAGS) $(DEBUG) $(INCLUDES) -o $@ $<

$(OUTPUT)/%.o: %.cpp
@echo $(CXX) $<
@mkdir -p $(dir $@)
@$(CXX) $(CXXFLAGS) $(DEBUG) $(INCLUDES) -o $@ $<

$(OUTPUT)/%.o: %.S
@echo $(CC) $<
@mkdir -p $(dir $@)
@$(CC) $(SFLAGS) $(DEBUG) -o $@ $<

.PHONY: clean all print

clean:
rm -rf $(OUTPUT)

print:
@echo $(SOURCES)
@echo $(OBJS)
@echo $(CFLAGS)