我的makefile中有这个规则,但是 make 没有找到它:
$(BUILDDIR)%.o : $(BUILDDIR)%.bin
@echo
$(OBJCOPY) -I binary -O elf32-avr --redefine-sym _binary_$*_bin_start=$* --redefine-sym _binary_$*_bin_end=$*_end $< $@
如果我明确说明, make 将使用它们(调用build / rom1.o和build / rom2.o; BUILDDIR = build /)
$(BUILDDIR)rom1.o : $(BUILDDIR)rom1.bin
@echo
$(OBJCOPY) -I binary -O elf32-avr --redefine-sym _binary_rom1_bin_start=rom1 --redefine-sym _binary_rom1_bin_end=rom1_end $< $@
$(BUILDDIR)rom2.o : $(BUILDDIR)rom2.bin
@echo
$(OBJCOPY) -I binary -O elf32-avr --redefine-sym _binary_rom2_bin_start=rom2 --redefine-sym _binary_rom2_bin_end=rom2_end $< $@
在第一次尝试时,是否有人提示通配符有什么问题?
修改
make的版本是在Ubuntu 16.04上运行的4.1。
这是尝试使用通配符运行时来自make
的错误消息:
make: *** No rule to make target 'build/rom1.o', needed by 'build/rom1.elf'. Stop.
答案 0 :(得分:0)
让我们简化问题......
如果这是您的文件结构......
.
├── Makefile
└── build
├── rom1.bin
└── rom2.bin
这是你的Makefile ......
BUILDDIR := build/
$(BUILDDIR)%.o: $(BUILDDIR)%.bin
touch $@
并运行$ make build/rom{1,2}.o
,生成的文件结构将为...
.
├── Makefile
└── build
├── rom1.bin
├── rom1.o
├── rom2.bin
└── rom2.o