関連: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
がアセンブラに供給されていますが、それらとリストを同時に保存することはあまり意味がありません。
あなたはちょうどあなたCFLAGS
に-Wa,-adhln=$*.lst
を追加し、代わりのパターンルールをオーバーライドして逃げることができるかもしれ(それが集合した形式ではないので、私は.lst
を選びました)。これは、Makeルールを使用するビルドシステムでのみ有効です。パターンルールのステムへの展開がMakeに固有なので、最終的にMakefileを生成しない代替(例えば、scons
)ではありません。また、明示的なスタイルルールではなく、パターンルールを作成する場合にのみ機能します。
$ 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を作成していますが、ルールのビルドコマンドの一部では、単一引用符で(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