了解XV6 makefile中的代码块

时间:2015-04-04 16:47:57

标签: c linux makefile gnu xv6

我试图理解XV6 makefile中的以下代码块:

ULIB = ulib.o usys.o printf.o umalloc.o

_%: %.o $(ULIB)
    $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $@ $^
    $(OBJDUMP) -S $@ > $*.asm
    $(OBJDUMP) -t $@ | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $*.sym

我在哪里可以找到解释上述所有选项的参考?例如,我试图寻找选项" -N"在GNU网站上,我找不到它。

提前致谢

1 个答案:

答案 0 :(得分:3)

我不是Makefile的专家,但你可能正在寻找几个GNU程序的man页面。
这一行,例如:

$(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $@ $^

如果我理解的话,是bashmake语法的混合:

  • $(LD)make变量LD取代,该变量很可能包含链接器可执行文件的名称(通常为ld)。
  • $(LDFLAGS)与上述类似,不同之处在于它将标记传递给LD中指定的可执行文件。
  • -N -e main -Ttext 0 -o只是LD
  • 的参数
  • $@已被目标
  • 取代
  • $^将替换为所有依赖项的空格分隔列表

因此,如果您想了解-N选项,最好的选择是GNU ld man page

  

<强> -N
  的 - OMAGIC
  将文本和数据部分设置为可读写。此外,不要对数据段进行页面对齐,并禁用链接到共享库。如果输出格式支持Unix样式幻数,请将输出标记为“OMAGIC”。注意:虽然PE-COFF目标允许使用可写文本部分,但它不符合Microsoft发布的格式规范。