
Autotools / Automake / Autoconfを使用していることをご理解ください。リダイレクトが使えないこれは、autotools によって生成された make ファイル内でコマンドごとに適用する必要があるためです。
オートツールで、各コンパイラおよび/またはアセンブラのリストを生成して保存するための規定を含むメイクファイルを作成する方法が必要です。個人パッケージ内のソース。
私が最初に試したのは、CCFLAGSに「-Wa,-acdhln -g」を追加することでした。これは確かに複合c/アセンブラリストを生成しましたが、ターミナルへ行きました、ファイルには保存されない. make の出力を (リダイレクトを使用して) キャプチャすると、散在するビルド コマンドとともに 47 個の異なるリストがすべて連結されます。
GCCのドキュメントを楽観的に読んで、私が期待していたこと全体オプション - GNU コンパイラ コレクションの使用、
-o file
出力をファイル file に配置します。これは、実行可能ファイル、オブジェクト ファイル、アセンブラ ファイル、または前処理された C コードなど、生成される出力の種類に関係なく適用されます。-o が指定されていない場合、デフォルトでは、実行可能ファイルが a.out に、source.suffix のオブジェクト ファイルが source.o に、そのアセンブラ ファイルが source.s に、プリコンパイル済みヘッダー ファイルが source.suffix.gch に、プリプロセス済みのすべての C ソースが標準出力に配置されます。
GCC コマンドラインの「-o {file}.o」に基づいて、ファイル {file}.o および {file}.s が表示されます。
何が起こったかというと、アセンブリ リストが標準出力に送信されたようです。
2016 年 10 月 23 日に追加編集。ドキュメントでは、アセンブラへの入力として渡されるコンパイラ出力ファイルや、リンカーへの入力として渡されるアセンブラ出力ファイルなどについて言及されていたことに今気づきました。どちらも、私がキャプチャしたいアセンブラ LISTING ファイルではありません。
これは、-save-temps オプションを使用する場合にも適用されます。このオプションでは、アセンブラからの出力 (リンカー入力ファイル) のみが保存され、アセンブラ リスト ファイルは保存されません。
ドキュメントの別の解釈では、すべての出力ファイルが -o オペランドで指定された 1 つのファイルに配置され、混在するか、最後に作成されたファイルが以前に作成されたファイルをオーバーレイすることになります (たとえば、コンパイラ パスからの出力がアセンブラ パスからの出力とオーバーレイされ、さらにコレクション パスからの出力とオーバーレイされます)。
これは逆効果のように思われるため、GCC (トップ レベルの実行プログラム) はさまざまなパスのファイル名を調整できるほど賢いのではないかと考えました。これは正しくないようです。「-o」からファイル名を省略することは、オブジェクト ファイル名が常に「{source}.o」ではなく「a.out」になることを除けば、まさに必要なことのように思えます。ソース出力名に定数が選択された理由は私にはわかりませんが、各 GCC 呼び出し後の名前変更手順で「a.out」が「{source}.o」に変更される可能性があります。
コンサルティングGNU アセンブラのドキュメント-o についてはほとんど言及されておらず、出力リストを処理するオプションもありません。アセンブラ バージョンの 1 つである tigcc では、リストが標準出力として出力されることが文書化されています。
Unix の GNU および GNU ビルド標準の改訂では、この問題は解決されなかったのでしょうか?
(私は気が狂っているのか、それとも Unix と呼ばれる非現実の世界に生きているだけなのか? ? ?)
ということで、MakeはGCCにアセンブリステップが実行されたときに標準出力を次の場所に配置するように指示する必要があるようです。[メールアドレス]ファイル。GCC オプションの動作 (およびスペック ファイルの使用方法の簡単な確認) を考えると、これは実行できないと思われます。おそらく Automake (または libtools?) は、複数のステップに分かれたコンパイル操作を作成し、さまざまなステップを分離して、アセンブリ出力をキャプチャできるでしょう。
しかし、メイクファイルはautotoolsによって生成されるので、autotoolsにmakeファイルを作成するように指示するアセンブリ出力ファイルを作成/キャプチャします。このタスクでは、autoconf/automake ルールやマクロの一部を書き直す必要があるようです。
最後に、私は他の誰かが autotools を使用して作成し、tarball にまとめられて私にダウンロードされたパッケージで作業しています。私は autotools のパッケージ化を行っておらず、巨大な *.ac ファイルも作成していません。また、できれば、それらをハッキングしたくありません。
パッケージの問題をデバッグするには、アセンブリ マップとリンク マップをいくつか取得する必要があります。
答え1
ついに私は折れて、キャプチャした端末出力を分析し、リスト ファイルを抽出する実際のプログラムを作成しました。これは私の特定のシステム / ビルド構成 / パッケージでは機能しますが、例としてしか提供できません。これは確かにすぐに使用できるツールではありません。
申し訳ありませんが、これは autotools の欠点を克服するための一般的な答えではありません。