[Makefile]一个错找了半天
一个错找半天
2021/11/25
首先来看看下面两行
1S_OBJS := $(patsubst %, obj/%, $(S_FILE_NO_DIR:.S=.o))
2S_OBJS := $(patsubst % ,obj/%, $(S_FILE_NO_DIR:.S=.o))
能仔细看出上面的不一样了吧,第一行是对的,第二行是错的,从头检查到尾,错误竟然在这,下次写Makefile一定要注意
完整Makefile
1CROSS_COMPILE ?= arm-linux-
2TARGET ?= name
3
4CC := $(CROSS_COMPILE)gcc
5LD := $(CROSS_COMPILE)ld
6OBJCOPY := $(CROSS_COMPILE)objcopy
7OBJDUMP := $(CROSS_COMPILE)objdump
8
9INCLUDE_DIR := imx6ul \
10 bsp/clk \
11 bsp/led \
12 bsp/delay
13
14SOURCE_DIR := project \
15 bsp/clk \
16 bsp/led \
17 bsp/delay
18
19INCLUDE := $(patsubst %, -I %, $(INCLUDE_DIR))
20
21S_FILE := $(foreach dir,$(SOURCE_DIR),$(wildcard $(dir)/*.S))
22C_FILE := $(foreach dir,$(SOURCE_DIR),$(wildcard $(dir)/*.c))
23
24S_FILE_NO_DIR := $(notdir $(S_FILE))
25C_FILE_NO_DIR := $(notdir $(C_FILE))
26
27S_OBJS := $(patsubst %, obj/%, $(S_FILE_NO_DIR:.S=.o))
28C_OBJS := $(patsubst %, obj/%, $(C_FILE_NO_DIR:.c=.o))
29OBJS := $(S_OBJS) $(C_OBJS)
30
31VPATH := $(SOURCE_DIR)
32
33.PHONY: clean
34
35$(TARGET).bin : $(OBJS)
36 $(LD) -Timx6ul.lds -o $(TARGET).elf $^
37 $(OBJCOPY) -O binary -S $(TARGET).elf $@
38 $(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis
39
40$(S_OBJS) : obj/%.o : %.S
41 $(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $^
42
43$(C_OBJS) : obj/%.o : %.c
44 $(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $^
45
46clean:
47 rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(OBJS)
48
49print :
50 @echo INCLUDE = $(INCLUDE)
51 @echo S_OBJS = $(S_OBJS)
52 @echo C_OBJS = $(C_OBJS)
53 @echo OBJS = $(OBJS)
54
吾心信其可行,
则移山填海之难,
终有成功之日!
——孙文
则移山填海之难,
终有成功之日!
——孙文
评论
0 评论