GNU MakeにおけるCPPFLAGSとCXXFLAGSの違い


回答:


210

CPPFLAGSC P re Pプロセッサのフラグ用であることになっています。CXXFLAGSC ++コンパイラのフラグ用です。

makeのデフォルトルール(私のマシンでは、とにかく)はCPPFLAGSほぼすべてにCFLAGS渡され、CのCXXFLAGSコンパイルとリンク時にのみ渡され、C ++のコンパイルとリンク時にのみ渡されます。


1
C ++をコンパイルするときにCFLAGSも渡されるのは一般的な慣習のようです。
白岩黄2013

21
ハ。わかった!xです+ので、それの側になっC++FLAGSコンパイラを爆破します。...パーティーに遅れて到着した可能性がありますが、それでも間違ったパーティーに時間どおりに到着するよりはましです。
Jacksonkr 2016年

@BaiyanHuang私はそれを一般的であるとは思わないでしょう。あなたは両方の慣習に出くわすでしょう。現在のセットアップが何をしているかを知る必要があります。
ジェームズムーア

1
CPPFLAGS、NOTのためにC PのLU PのLUが、CXXFLAGS です。
shizhen

真実だがひどい。これは80年代に行き詰まっているような気がします。
shuhalo

34

デフォルトでCPPFLAGSは、CプリプロセッサにCXXFLAGS渡されますが、C ++コンパイラには渡されます。

GNUマニュアルを作成します。このような質問(参照のための優れたリソースである暗黙的変数)。


27
私がこれとまったく同じ質問をしたとき、私はマニュアルを見つめていました。私はCPPFLAGSをstackoverflowに入力し、マニュアルを検索するよりもはるかに速く回答を得ました。
Dan Hook


0

デフォルトでは、これらは何かに設定されています。

実際には、すべてのプロジェクトが何をするかを知る必要があります。事実上、makeに組み込まれているこれらのデフォルトを使用することはありません。たとえば、「Cプリプロセッサへのフラグ」を意味するCPPFLAGSに依存している場合、気になるプロジェクトが「C ++コンパイラへのフラグ」を意味するために使用していることがわかります。代わりに。また、CFLAGSフラグはC ++コンパイル行に渡されますか?時々。常にではない。等々


1
一部のプロジェクトでは、CPPFLAGSを使用して「c ++フラグ」を意味しますが、それらのプロジェクトは標準を知らないためほぼ間違いなくそうしており、CXXFLAGSを使用した方がよいでしょう。
Score_Under

@Score_Under私はあなたに反対しませんが、世界は誰もが標準だと思っているものを気にしないプロジェクトでいっぱいです。あなたは常に検討しなければなりません。
James Moore、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.