错误:没有规则可制作目标“Obj/main.o”,由“sd.elf” 需求。 停止
targe = sd
pwd =$(shell pwd)
vpath %.c $(pwd)/CMSIS/Src/
vpath %.c $(pwd)/Dev/Src/
vpath %.c $(pwd)/Usr/
vpath %.h $(pwd)/CMSIS/Inc/
vpath %.h ./Dev/Inc/
vpath %.h ./Usr/Inc/
vpath %.s ./
c_source = \
/Usr/main.c \
/Usr/stm32f4xx_it.c \
/CMSIS/Src/system_stm32f4xx.c \
out_obj_path = ./Obj/
dir_obj = ./Obj/
s_source = ./startup_stm32f407xx.s
s_out = $(addprefix $(out_obj_path),$(notdir $(s_source:.s=.o)))
LDFILE = $(pwd)/STM32F407ZGTx_FLASH.ld
path = -I ./CMSIS/Inc/ -I ./Dev/Inc/ -I ./Usr/Inc/
cdefin = -DSTM32F407xx -DUSE_HAL_DRIVER
CC := arm-none-eabi-gcc
AS := arm-none-eabi-as
LDFLAGS = -mthumb -mcpu=cortex-m3 -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl, -Wl,--gc-sections -Wl,--defsym=malloc_getpagesize_P=0x80 -Wl,--start-group -lc -lm -Wl,--end-group
SFLAGE = -mthumb -mcpu=cortex-m3 -g -Wa,--warn
CFLAGS = -mthumb -mcpu=cortex-m4 -g -Wall #
#c_source = $(notdir $(wildcard *.c ./CMSIS/Src/*.c ./Dev/Src/*.c ./Usr/*.c))
obj_source = $(addprefix $(out_obj_path),$(notdir $(patsubst %.c,%.o,$(c_source))))
#$(warning $(c_source))
$(warning $(obj_source))
$(warning $(s_out))
$(targe).elf:$(obj_source) $(s_out)
$(CC) -o $@ $^ -mthumb -mcpu=cortex-m3 -T $(LDFILE) -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl,-Map=test.map -Wl,--gc-sections -Wl,--defsym=malloc_getpagesize_P=0x80 -Wl,--start-group -lc -lm -Wl,--end-group
%.o:%.c
$(CC) $(CFLAGS) $(path) $(cdefin) -c $< -o $@
$(s_out):$(s_source)
arm-none-eabi-gcc -c -mthumb -mcpu=cortex-m3 -g -Wa,--warn -o ./Obj/$(s_out) $(s_source)
clean:
rm -f ./*.o ./Dev/Src/*.o ./*.elf ./Obj/*.o ./test.map
是想把所有的编译后的文件输出到Obj文件夹下,然后根据obj文件夹下的内容连接生成elf文件,但是现在存在一个问题,一旦把编译文件输出到obj文件夹下,就会报错“没有规则可制作目标“Obj/main.o”,由“sd.elf” 需求。 停止”,但是把编译文件输出的各自.c文件的目录下就不会报错(这个不会报错是因为加如了vpath变量),现在求大佬指点,我是什么地方出了问题。
注意缩进必须是真的tab字符,不能用空格代替
建议通读一遍”跟我一起写MakeFile“