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

时间:2014-01-21 09:26:50

标签: 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

生成文件:

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

all: multiboot

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

1 个答案:

答案 0 :(得分:0)

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

在这种情况下,似乎问题是您对“multiboot.o”命令的指令实际上并不生成文件“multiboot.o”作为输出。尝试简单地做:

 multiboot.o: multiboot.s

(即,没有指定要运行的命令)。简单地通过类似的机制声明这种依赖性应该导致一个隐式规则/命令来从“multiboot.s”创建“multiboot.o”输出。