2012-01-27 2 views

答えて

15

はい。

gcc-save-tempsオプションをご覧ください。

ソースファイルをコンパイルし、前処理の結果を.iファイルに保存します。 (また、アセンブラフェーズの結果を.sファイルに保存します)。

gcc -save-temps -c main.cc -o main.o 

main.omain.imain.sを生成します。

main.iは、前処理の結果です。

+0

これは完全に機能します!ありがとうございました! – alesko

+0

@aleskoようこそ。 – ouah

+0

私のgccベースのコンパイラは '.s'ファイルのみを保存します – Adrian

5

を生成する

gcc -E -c main.cc -o main.o 

はありません、-E自体で、-s-c-Eオプションは、オプションの "停止" と呼ばれていません。彼らは実際に特定のポイントでプロセスを停止するので、続行できません。

これを実行するには、2回のパスで実行するか、-save-tempsを使用して、コンパイル時に通常削除された一時ファイルのコピーを保持する必要があります。 gcc manページから

-Eを議論するもの(少し言い換え):

あなただけのコンパイルの段階のいくつかをしたい場合、あなたはどこから始めればGCCを伝えるために-x(またはファイル名の拡張子)を使用することができます、そして-c、-S、-Eのいずれかのオプションを指定すると、gccがどこで停止するのかが分かります。いくつかの組み合わせ(たとえば、-x cpp-output -E)はgccに何も行わないよう指示します。

-Eは、前処理段階の後で停止します。適切なコンパイラを実行しないでください。出力は、標準出力(または-oが指定されている場合は出力ファイル)に送信される、前処理されたソースコードの形式です。

-Eオプションを使用すると、前処理以外は実行されません。

そして -save-tempsの説明:

-save-tempsを

ストア永久に通常の "一時的" 中間ファイル。それらを現在のディレクトリに置き、ソースファイルに基づいて名前を付けます。

したがって、-c -save-tempsでfoo.cをコンパイルすると、ファイルfoo.iとfoo.s、およびfoo.oが生成されます。

これは、コンパイラが通常は統合プリプロセッサを使用していても、プリプロセスされたfoo.i出力ファイルを作成します。

+0

詳細情報をありがとう! – alesko

関連する問題