相關: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