我有关于编写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.o
main.c
和boot.o
boot.asm
生成CFLAGS
?
Q2。最后一行表示什么?
.s.o:
nasm $(ASFLAGS)$&lt;
Q3 .o
在顶部定义,但未在任何地方使用!?它们是否在编译时自动考虑?
Q4 没有为从任何地方的源代码转换为{{1}}文件而编写的命令。 makefile工作正常,并生成所需的可执行文件?
答案 0 :(得分:1)
Q2:这是从.o
(汇编源文件)生成.s
的规则。
Q1:因为它刚刚解释过的规则所涵盖。
问题4:有.s.o
规则,make
有built-in rule用于编译C模块。
问题3:上述从.o
创建.c
的规则需要考虑CFLAGS
。