当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
答案 0 :(得分:0)
“all”命令依赖于“multiboot”,但是没有明确的规则来定义如何生成“multiboot”。在这种情况下,Make使用一个预定义的规则来理解,如果存在“$ target.o”目标,则可以通过运行链接器(在本例中为GCC)从“$ target.o”构造“$ target”
在这种情况下,似乎问题是您对“multiboot.o”命令的指令实际上并不生成文件“multiboot.o”作为输出。尝试简单地做:
multiboot.o: multiboot.s
(即,没有指定要运行的命令)。简单地通过类似的机制声明这种依赖性应该导致一个隐式规则/命令来从“multiboot.s”创建“multiboot.o”输出。