生成文件模式匹配是否可以同时包含前缀和后缀作为变量?
Can a makefile pattern match contain both prefix and suffix as vairables?
我正在尝试匹配规则中的模式以从如下 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
我看到here提到了
"Note that expansion using ‘%’ in pattern rules occurs after any variable or function expansions, which take place when the makefile is read."
那么,变量不是应该在替换 % 之前展开吗?
答案很简单:
EXE_EXT = .elf
BIN_EXT = .bin
$(BIN_TARGETS) : $(BIN_DIR)/%.$(BIN_EXT) : $(BIN_DIR)/%.$(EXE_EXT)
因此 $(BIN_DIR)/%.$(BIN_EXT)
扩展为 $(BIN_DIR)/%..bin
(注意双句点)。
您必须决定是要在变量中还是在模式中使用句点,但不能同时出现在这两个地方。
我正在尝试匹配规则中的模式以从如下 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
我看到here提到了 "Note that expansion using ‘%’ in pattern rules occurs after any variable or function expansions, which take place when the makefile is read."
那么,变量不是应该在替换 % 之前展开吗?
答案很简单:
EXE_EXT = .elf
BIN_EXT = .bin
$(BIN_TARGETS) : $(BIN_DIR)/%.$(BIN_EXT) : $(BIN_DIR)/%.$(EXE_EXT)
因此 $(BIN_DIR)/%.$(BIN_EXT)
扩展为 $(BIN_DIR)/%..bin
(注意双句点)。
您必须决定是要在变量中还是在模式中使用句点,但不能同时出现在这两个地方。