*Autotools*を使用してコンパイラのリストをファイルごとに保存する方法は?

*Autotools*を使用してコンパイラのリストをファイルごとに保存する方法は?

私はAutotools / Automake / Autoconfを使用しています。リダイレクトは使用できません。なぜなら、autotoolsで生成されたmakeファイルで命令ごとに適用する必要があるからです。

それぞれに関連するコンパイラおよび/またはアセンブラのリストを生成および保存するための規制を使用して、自動化されたツールを使用してmakeファイルを生成する方法が必要です。個人のソースコードはパッケージにあります。

私の最初の試みは、CCFLAGSに「-Wa、-acdhln -g」を追加することでした。これは複合c /アセンブラリストを生成しますが、ターミナルに行ったファイルを入力しないでください。。 make 出力をキャプチャすると (リダイレクトを使用)、ビルドコマンドが各所に散在している 47 の異なるリストを取得します。

私が望むのは、GCC文書を楽観的に読むことです。完全なオプション - GNUコンパイラコレクションの使用

-o file
出力を file file に配置します。これは、実行可能ファイル、オブジェクトファイル、アセンブラファイル、または前処理されたCコードなど、生成されたすべての種類の出力に適用されます。

-oを指定しない場合、デフォルトでは実行可能ファイルはa.outに、source.suffixのターゲットファイルはsource.oに、対応するアセンブラファイルはsource.sに、プリコンパイルされたヘッダファイルはソース.suffix.gchに配置されます。され、すべての前処理されたCソースコードは標準出力に表示されます。

GCCコマンドラインの「-o {file} .o」に基づいて{file}.oおよび{file}.sファイルを表示するために使用されます。

何が起こるかは、アセンブリのリストが明らかに標準出力に送信されることです。

2016年10月23日を追加するように修正されました。これで、ドキュメントでは、コンパイラ出力ファイルがアセンブラに入力として渡され、アセンブラ出力ファイルがリンカに入力として渡されるなどの内容について話していることに気づきました。キャプチャしたいアセンブラリストファイルも同様です。

これは -save-temps オプションを使用する場合にも当てはまります。これは、アセンブラリストファイルではなくリンカ入力ファイルであるアセンブラの出力のみを保存します。

  • 文書の別の解釈は、各出力ファイルが-oオペランドで指定された単一のファイルに配置されるか、一緒に混在するか、最後に生成されたファイルが以前に生成されたファイルを上書きすることを意味します。 (たとえば、コンパイラチャネルの出力はアセンブリチャネルの出力をオーバーライドするアセンブラチャネルの出力をオーバーライドします。)

    これは非生産的なように見えるため、GCC(最上位の実行者)がそのファイル名を調整するのに十分スマートであると仮定します。他のチャンネル。これは本当ではないようです。

  • 「-o」からファイル名を省略することは、ターゲットファイルの名前が常に「{source}.o」ではなく「a.out」であることを除いて、まさに私たちが望むようです。ソース出力名定数が選択された理由はわかりませんが、各GCC呼び出し後の名前変更ステップで、「a.out」が「{source}.o」に変更される可能性があります。

  • 探すGNUアセンブラ文書-oのコマンドが少なく、出力リストを処理するオプションはありません。アセンブラバージョンtigccはこのリストを記録し、標準出力にエクスポートします。

    • Unix用GNUとGNU Build Standardリビジョンはこの問題を解決しませんか?

    • (私が狂ったのですか、それとも単なるUnixという非現実的な世界に住んでいるのですか?)

Makeは、アセンブリステップを実行するときに標準出力を次の場所に配置する必要があることをGCCに知らせる必要があるようです。[Eメール保護]文書。 GCCオプションがどのように機能するか(そして仕様ファイルをすばやく見る方法)を考えると、これが可能であると思われます。おそらくAutomake(またはlibtools?)は、アセンブリの出力をキャプチャできるように個々のステップを分離してマルチレベルのコンパイルタスクを作成できます。

しかし、makeファイルはautotoolsによって生成されるため、メソッドが必要です。autotoolsにmakeファイルを作成するように指示するこれにより、アセンブリ出力ファイルが作成/キャプチャされます。これを行うには、いくつかのautoconf / automakeルールおよび/またはマクロを再構築する必要があるようです。

最後に、私は他の人が自動化ツールを使用して作成してパッケージ化して私にダウンロードしたパッケージを使用しています。私は自動化されたツールのパッケージングを実行したり、巨大な* .acファイルを生成したり、避けることができればハッキングしたくありません。

パッケージの問題を試してデバッグするには、アセンブリとリンクマップが必要です。

答え1

私はついに分解してキャプチャされたターミナル出力を分析し、リストファイルを抽出する実際のプログラムを作成しました。私は特定のシステム/ビルド構成/パッケージで動作しますが、例としてのみ提供できます。確かに使いやすいツールではありません。

申し訳ありません。これは自動ツールの欠点を克服するための一般的な答えではありません。

関連情報