我正在阅读xv6的代码,并且发现很难阅读Makefile。你能告诉我以下语句是如何工作的吗:
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?你能推荐几本好书吗?
谢谢!
发布于 2012-03-19 13:50:10
CFLAGS是传递给编译器CC的选项(如-fno-stack-protector、-E等)。$(CC)将被实际的编译器替换。ie CC应该在此之前使用类似于set CC=gcc的东西进行初始化。LDFLAGS是(到链接器LD的)选项。行就像C中的+=运算符一样,它更新为CFLAGS和LDFLAGSxv6.img依赖于bootblock kernel fs.img。也就是说,我们告诉make,为了构建xv6.img,您需要构建bootblock kernel和fs.img first您可以了解dd命令here
下面是完整的make和Makefiles百科全书指南
http://www.gnu.org/software/make/manual/make.html
发布于 2021-02-20 01:51:27
为了补充答案,dd命令的作用类似于复制命令,本质上是接受一个输入文件并将其内容复制到的输出文件中。计数是要复制的块的数量的指示符。
您提供的代码与xv6.img文件的构建相关,该文件包含引导加载程序、文件系统和内核。该代码实质上是将/dev/零文件中的10000个0块复制到xv6.img中。然后从bootblock(由bootasm.S和bootmain.c创建,如Makefile目标所见)复制到扇区0。然后查找一个扇区,然后将内核复制到镜像文件中。
https://stackoverflow.com/questions/9765443
复制相似问题