0

g++ のドキュメントを正しく理解していることを確認したいと思います。

G++ を介して C/C++ プログラムを操作する場合、通常、前処理、コンパイル、アセンブリ、およびリンクを行います。

コードのデバッグ バージョンとリリース バージョンのどちらをビルドするかによって、最終製品に異なるフラグを適用することを選択できます。

-O3を例にとってみましょう。このフラグはどの段階に適用する必要がありますか? これは、コンパイル中に .o ファイルを生成する作業を行うときに適用する必要があると思います。(これはどこかのドキュメントにありますか? )

その場合、リリース用とデバッグ用の 2 つのバージョンのプログラムを作成したい場合は、make ファイルの一部として .o を別々に作成する必要があります (これは正しいですか?)

一般に、G++ ヘルプは広範です。特定のフラグをプロセスのどの部分に適用する必要があるかを調べるにはどうすればよいでしょうか?

最適化について話しているとき、それはオブジェクト コードについて話しているのでしょうか?

4

1 に答える 1

0

フラグ -O3 を例に取ります。このフラグはどの段階に適用する必要がありますか?

コンパイル。

リリース用とデバッグ用の 2 つのバージョンのプログラムを生成する場合は、make ファイルの一部として .o を個別に生成する必要があります。

はい。

前処理は、たとえばNDEBUGorなどのマクロの定義によっても影響を受ける可能性がありますが、_GLIBCXX_DEBUG前処理を個別に行うことは一般的ではありません。ほとんどのメイクファイルは、コンパイラを呼び出してソース ファイルをオブジェクト ファイルに直接変換するため、コンパイラは前処理、コンパイル、およびアセンブリを実行します。ワンステップで。

一般に、G++ ヘルプは広範です。特定のフラグをプロセスのどの部分に適用する必要があるかを調べるにはどうすればよいでしょうか?

もちろん、RTFMです!

オプションの概要には、すべてのオプションがセクションにグループ化されて一覧表示されます。

明らかに、これらのオプションは特定の段階を制御します。

プリプロセッサを制御する
オプション アセンブラに
オプションを渡す リンクのオプション

Options for Directory Searchもあります。ヘッダー ファイルの検索パスはプリプロセッサによって使用され、ライブラリの検索パスはリンカによって使用されます。

通常、他のすべてのオプションはコンパイルを制御するか、すべての段階に適用されます (-o出力ファイル名の設定など)。

最適化について話しているとき、それはオブジェクト コードについて話しているのでしょうか?

はい。

-OGNU リンカ用のフラグもあります。ld マニュアルを参照してください。ただし、現時点では、ELF 共有ライブラリをリンクする場合にのみ効果があり、明示的に要求しない限り、GCC はそれを使用しません。-Wl,-O

于 2012-08-14T07:44:43.007 に答える