web-dev-qa-db-ja.com

g ++ -Dフラグは何をしますか?

私は-のCFLAGSを見ています

CFLAGS=-g -w -D LINUX -O3 -fpermissive

makefileで。 -Dフラグは何をしますか?私はmanページでそれを見る

-D name
    Predefine name as a macro, with definition 1. 

しかし、私はそれを解釈する方法がわかりません。私の解釈は...それはLINUXをマクロにし、Linux環境では-03と-fpermissiveのみを実行します。そうですか?そうでない場合は、何ですか?助けてくれてありがとう

21
Sterling

これは、コンパイルされるファイルのソースコードにステートメント#define LINUX 1を追加することと同じです。他のコンパイルフラグには影響しません。これは、コードで#ifdefステートメントを有効にする簡単な方法であるためです。したがって、次のようなコードを作成できます。

#ifdef LINUX
   foo;
#endif

-Dフラグで制御できるマクロが有効になっている場合にのみ有効になります。したがって、ソースファイルを編集せずに、コンパイル時に条件付きコンパイルステートメントを有効/無効にする簡単な方法です。

27

-O3とは何の関係もありません。基本的には、

#define LINUX 1

コンパイルされたファイルの先頭。

3
jpalecek