我正在尝试匹配规则中的模式,以从c文件编译和生成二进制文件,如下所示
$(BIN_TARGETS) : $(BIN_DIR)/%.$(BIN_EXT) : $(BIN_DIR)/%.$(EXE_EXT)
我看到以下错误
../../rules/mkrules.mk:13: target 'bin/hello.bin' doesn't match the target pattern
我已经尝试了以下方法,它似乎有效
$(BIN_TARGETS) : $(BIN_DIR)/%.bin : $(BIN_DIR)/%.elf
我想使文件扩展名不固定。
我已经分配了变量,如下所示 makefile 的开头
EXE_EXT = .elf
BIN_EXT = .bin
我看到这里提到了 "请注意,在模式规则中使用'%'的扩展发生在任何变量或函数扩展之后,这些扩展发生在读取makefile时。
那么,变量不应该在%被替换之前扩展吗?
答案很简单:
EXE_EXT = .elf
BIN_EXT = .bin
$(BIN_TARGETS) : $(BIN_DIR)/%.$(BIN_EXT) : $(BIN_DIR)/%.$(EXE_EXT)
因此,$(BIN_DIR)/%.$(BIN_EXT)
扩展到$(BIN_DIR)/%..bin
(注意双句点(。
您必须决定是要在变量中还是在模式中设置句点,但它不能同时位于两个位置。