【发布时间】:2021-06-14 10:57:23
【问题描述】:
在嵌入式项目中,您通常使用 objcopy 将 gcc 的 ELF 输出转换为原始二进制格式。我试图为此编写一个模式规则:%.bin: %(来自 gcc 的可执行输出没有后缀,至少在 Linux 上是这样)。这失败了make: *** No rule to make target ...
这是一个完整的测试用例:
test.c:
int main(int argc, char *argv[]) {
return 0;
}
生成文件:
%.bin: %
objcopy -O binary $< $@
这通过说make test test.bin 起作用,也就是说,通过明确要求它首先构建test 可执行文件。说make test.bin 是行不通的。在这种情况下,不知何故,make 没有意识到它可以使用内置规则创建先决条件。
我知道我可以通过将规则编写为 test.bin: test 来解决此问题,但我想知道,为什么此模式规则不起作用,我能否以某种方式使其起作用。
此外,我认为使其工作的显而易见且实用的方法打破了漂亮而优雅的内置规则系统。如果我可以将一个选项放入例如LDFLAGS 使链接器输出带有某些后缀的可执行文件,例如.elf(我还需要重写内置的链接规则吗?哦,好吧……)。
我承认,这纯属学究式的学术问题。
【问题讨论】:
标签: makefile