Makefile 为什么在这个make文件中执行gcc?

Makefile 为什么在这个make文件中执行gcc?,makefile,Makefile,当键入make获得以下输出时,我有以下makefile。为什么在这种情况下调用gcc nasm -felf ./source/multiboot.s gcc multiboot.o -o multiboot gcc: error: multiboot.o: No such file or directory gcc: fatal error: no input files compilation terminated. make: *** [multiboot] Error 4 生成文

当键入make获得以下输出时,我有以下makefile。为什么在这种情况下调用gcc

nasm -felf ./source/multiboot.s
gcc   multiboot.o   -o multiboot
gcc: error: multiboot.o: No such file or directory
gcc: fatal error: no input files
compilation terminated.
make: *** [multiboot] Error 4
生成文件:

CC=gcc
ASM=nasm
ASMFLAG=-felf
SOURCE=./source/

all: multiboot

multiboot.o: $(SOURCE)multiboot.s
    $(ASM) $(ASMFLAG) $(SOURCE)multiboot.s

all命令依赖于multiboot,但没有明确的规则定义如何生成multiboot。在本例中,Make使用一个预定义规则,该规则可以理解,如果$target.o目标存在,则可以通过运行链接器(在本例中为GCC)从$target.o构建$target

这种情况下的问题似乎是,multiboot.o命令的指令实际上并没有生成multiboot.o文件作为输出。试着简单地做:

 multiboot.o: multiboot.s
也就是说,不指定要运行的命令。通过类似的机制,简单地声明此依赖项应该会产生一个隐式规则/命令,从multiboot.s创建multiboot.o输出