相关:How to remove "noise" from GCC/clang assembly output?:很多方法可以让编译器ASM输出更易于阅读。
-Wa,xyz=FILE
作出了额外输出文件旁边的正常输出。它与-save-temps
正交。如果你想要它到一个文件,你需要在命令行上额外的输出文件名。
例如在Makefile pattern rule:
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) -Wa,-adhln=$*.lst $< -o [email protected]
假如把它放在一个名为makefile文件(缩进是一个真正的TAB,而不是空格),那么你可以:
$ CFLAGS='-O3 -g -fverbose-asm' make rnd10.o
cc -c -O3 -g -fverbose-asm -Wa,-adhln=rnd10.lst rnd10.c -o rnd10.o
$ ll rnd10.*
-rw-rw-r-- 1 peter peter 912 Mar 3 2016 rnd10.c
-rw-rw-r-- 1 peter peter 25K Sep 6 08:23 rnd10.lst
-rw-rw-r-- 1 peter peter 12K Sep 6 08:23 rnd10.o
所以无论是和的.o上市是由同一个命令创建的。如果您使用的是-save-temps
,那么也会有预处理的源代码和实际用于汇编程序的.s
,但在同一时间保存这些代码和列表可能没有多大意义。 (我选择.lst
,因为它不是在将聚集格式)
您可能能够与刚刚加入-Wa,-adhln=$*.lst
您CFLAGS
,而不是重写模式规则脱身。这仍然只适用于使用Make的构建系统,而不是最终不会生成Makefile的替代方案(例如scons
),因为扩展到模式规则的主干的$*
特定于Make。它也只适用于制作模式规则,而不是明确的foo.o : foo.c foo.h
样式规则。
例如
$ rm Makefile
$ CFLAGS='-O3 -g -fverbose-asm -Wa,-adhln=$*.lst' make rnd10.o
cc -O3 -g -fverbose-asm -Wa,-adhln=rnd10.lst -c -o rnd10.o rnd10.c
有趣的事实:请doesn't even work with spaces in filenames,但你可以从别的shell扩展保护(如foo$(echo)_weirdname.c
)与规则的构建命令部分单引号,并在CFLAGS。例如CFLAGS="-O3 -g "\'-Wa,-adhln=\$\*.lst\' make -B 'foo$(echo)weirdfil\\.o'
尝试'-fverbose-asm'。 – fuz
有关**使asm输出可读**的更多提示,另请参阅:[如何从GCC/clang程序集输出中删除“噪声”(http://stackoverflow.com/a/38552509/224132) –
好吧,我认为它有帮助。谢谢 ! – Raj