0

我对编写makefile有基本的想法。但是我发现很难理解这个makefile。

SOURCES=boot.o main.o

CFLAGS=-nostdlib -nostdinc -fno-builtin -fno-stack-protector
LDFLAGS=-Tlink.ld
ASFLAGS=-felf

all: $(SOURCES) link

clean:
    -rm *.o kernel

link:
    ld $(LDFLAGS) -o kernel $(SOURCES)

.s.o:
    nasm $(ASFLAGS) $<

我的文件夹包含main.c, boot.asm,link.ld文件。

Q1。为什么没有编写命令来生成main.ofrommain.cboot.ofrom boot.asm

Q2。最后几行是什么意思?

.so:
nasm $(ASFLAGS) $<

Q3 CFLAGS定义在顶部,但没有在任何地方使用!?编译时是否会自动考虑它们?

Q4在任何地方都没有为从源代码转换为.o文件而编写的命令。makefile 工作正常并生成所需的可执行文件?

4

1 回答 1

1

.oQ2:这是从.s(汇编源文件)生成的规则。

Q1:因为它包含在我刚才解释的规则中。

Q4:有.s.o规则,并且make有一个编译C模块的内置规则

.oQ3:前面提到的从 a创建 a 的规则.c考虑CFLAGS在内。

于 2013-10-14T09:56:02.840 回答