Makefile:显式输入有效,通配符%不起作用

时间:2017-05-21 16:13:57

标签: makefile gnu-make

我的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.

1 个答案:

答案 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