生成文件模式匹配是否可以同时包含前缀和后缀作为 vairable?



我正在尝试匹配规则中的模式,以从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(注意双句点(。

您必须决定是要在变量中还是在模式中设置句点,但它不能同时位于两个位置。

最新更新