了解 XV6 makefile 中的代码块

Understanding code block from XV6 makefile

我试图从 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

在哪里可以找到解释上述所有选项的参考资料?例如,我试图在 GNU 网站上寻找选项“-N”,但没有找到。

提前致谢

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

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

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

  • $(LD) 替换为 make 变量 LD,它很可能包含链接器可执行文件的名称(通常为 ld)。
  • $(LDFLAGS) 与上面类似,区别在于它持有 标志 以传递给 LD.[=41= 中命名的可执行文件]
  • -N -e main -Ttext 0 -o 只是 LD
  • 的参数
  • $@替换为目标
  • $^ 替换为 space 分隔的所有依赖项列表

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

-N
--omagic
Set the text and data sections to be readable and writable. Also, do not page-align the data segment, and disable linking against shared libraries. If the output format supports Unix style magic numbers, mark the output as "OMAGIC". Note: Although a writable text section is allowed for PE-COFF targets, it does not conform to the format specification published by Microsoft.