#Created by JamieChu 2019-06-19 ;
#幾乎全自動了,改一下TARGET_BIN的值,然后扔到工程目錄下,運行make命令就可以了;
#也可以自行修改VPATH來搜尋其他目錄;
#本makefile會自動生成依賴并在make的時候自動判斷依賴文件是否為最新;
VPATH = src:../headers #設置makefile額外的代碼搜尋目錄,不同目錄之間用:分開
TARGET_BIN := keyled.bin
TARGET_ELF := $(patsubst %.bin,%.elf,$(TARGET_BIN))
TARGET_DUMP := $(patsubst %.bin,%.dump,$(TARGET_BIN))
SRC_S := $(shell ls *.S) #shaell是執行系統命令行命令的函數,這里執行了ls
SRC_C := $(shell ls *.c)
SRC_H := $(shell ls *.h)
OBJ_S := $(patsubst %.S,%.o,$(SRC_S)) #patsubst是模式替換函數
OBJ_C := $(patsubst %.c,%.o,$(SRC_C))
DEP_FILES := $(patsubst %.c,%.o.d,$(SRC_C)) #每個.o文件的make依賴信息,這假設每個c文件都配有h文件
DEP_FILES := $(wildcard $(DEP_FILES)) #篩選出真實存在的.d文件,或者直接使用shell函數來ls *.d
CC := arm-linux-gcc
AS := arm-linux-as
LD := arm-linux-ld
CFLAGS := -mcpu=arm920t
$(TARGET_BIN):$(OBJ_S) $(OBJ_C)
arm-linux-ld -Ttext 0 $^ -o $(TARGET_ELF)
arm-linux-objcopy -O binary -S $(TARGET_ELF) $(TARGET_BIN)
arm-linux-objdump -D $(TARGET_ELF) > $(TARGET_DUMP)
ifneq ($(DEP_FILES),) #第一次編譯,肯定沒有.d文件,那么DEP_FILES就是空,所以不執行include
include $(DEP_FILES) #第二次編譯剛好相反,所以include這個依賴信息進來
endif
%.o:%.S
$(AS) $(CFLAGS) $< -o $@
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@ -MD -MF $@.d
.PHONY:clean cleanall cleandepfiles
clean:
rm -rf *.o *.elf *.dump *.bin
cleanall:
rm -rf *.o *.elf *.dump *.bin *.d
cleandepfiles:
rm -rf *.d
上一篇:arm-linux 學習(1)點亮第一個led程序
下一篇:開發板學習Day8:第009課 gcc和arm-linux-gcc和Makefile
推薦閱讀
史海拾趣