Makefile 如何使用GNU make的隐式规则从'foo.s'生成'foo'?

Makefile 如何使用GNU make的隐式规则从'foo.s'生成'foo'?,makefile,gnu-make,Makefile,Gnu Make,这是我的makefile: AS=nasm ASFLAGS=-f elf64 %: %.o ${LD} -o $@ $< 但如果我直接运行makefoo,则使用cc $ rm foo foo.o $ make foo cc -f elf64 foo.s -o foo cc: error: elf64: No such file or directory cc: error: unrecognized command line option ‘-f’ make:

这是我的makefile:

AS=nasm
ASFLAGS=-f elf64

%: %.o
        ${LD} -o $@ $<
但如果我直接运行makefoo,则使用cc

$ rm foo foo.o
$ make foo
cc -f elf64   foo.s   -o foo
cc: error: elf64: No such file or directory
cc: error: unrecognized command line option ‘-f’
make: *** [<builtin>: foo] Error 1
链接单个对象文件一节末尾的中对此进行了说明

我应该如何编写makefile,以便可以从foo.s运行make foo以生成foo.o,然后从foo.o自动运行foo?

您可以替换:

%: %.o
    ${LD} -o $@ $<
对于$ASEXES中的每个foo,模式规则如下:

%: %.o
        ${LD} -o $@ $<

请参阅GNU make手册标题部分。您可以使用以下命令清除默认隐式规则:

%: %.s
请参阅制造手册中的

foo: foo.o
    ${LD} -o $@ $<
%: %.o
        ${LD} -o $@ $<
%: %.s