我试图理解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网站上,我找不到它。
提前致谢
答案 0 :(得分:3)
我不是Makefile的专家,但你可能正在寻找几个GNU程序的man
页面。
这一行,例如:
$(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $@ $^
如果我理解的话,是bash
和make
语法的混合:
$(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发布的格式规范。