首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xv6的Makefile

xv6的Makefile
EN

Stack Overflow用户
提问于 2012-03-19 13:32:19
回答 2查看 3K关注 0票数 1

我正在阅读xv6的代码,并且发现很难阅读Makefile。你能告诉我以下语句是如何工作的吗:

代码语言:javascript
复制
1. "CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector)"
2. "LDFLAGS += -m $(shell $(LD) -V | grep elf_i386 2>/dev/null)"
3. "xv6.img: 
bootblock kernel fs.img 

dd if=/dev/zero of=xv6.img count=10000

dd if=bootblock of=xv6.img conv=notrunc

dd if=kernel of=xv6.img seek=1 conv=notrunc"

如何详细学习Makefile?你能推荐几本好书吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-19 13:50:10

  1. CFLAGS是传递给编译器CC的选项(如-fno-stack-protector-E等)。$(CC)将被实际的编译器替换。ie CC应该在此之前使用类似于set CC=gcc的东西进行初始化。
  2. LDFLAGS是(到链接器LD的)选项。行就像C中的+=运算符一样,它更新为CFLAGSLDFLAGS
  3. This行的现有值,这意味着xv6.img依赖于bootblock kernel fs.img。也就是说,我们告诉make,为了构建xv6.img,您需要构建bootblock kernelfs.img first

您可以了解dd命令here

下面是完整的makeMakefiles百科全书指南

http://www.gnu.org/software/make/manual/make.html

票数 2
EN

Stack Overflow用户

发布于 2021-02-20 01:51:27

为了补充答案,dd命令的作用类似于复制命令,本质上是接受一个输入文件并将其内容复制到的输出文件中。计数是要复制的块的数量的指示符。

您提供的代码与xv6.img文件的构建相关,该文件包含引导加载程序、文件系统和内核。该代码实质上是将/dev/零文件中的10000个0块复制到xv6.img中。然后从bootblock(由bootasm.S和bootmain.c创建,如Makefile目标所见)复制到扇区0。然后查找一个扇区,然后将内核复制到镜像文件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9765443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档