CXXFLAGSとCPPFLAGSの違い

2017年5月13日 オフ 投稿者: khws4v1

MakefileのCXXFLAGSとCPPFLAGSの違いについて。
名前が似ているだけあって混同してしまっていることがあるので念の為に書いとく。

実は2つの変数の違いは公式ドキュメントを見ると一瞬で分かるので読む。

CXXFLAGS

Extra flags to give to the C++ compiler.

 

CPPFLAGS

Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers).

CXXFLAGSはC++コンパイラ(CXX)のオプション、CPPFLAGSはCプリプロセッサのオプションを意味している。
MakefileにCPPFLAGS = -std=c++11tと書くのは誤りで、CXXFLAGSを使わなければいけない。

試しにCXXFLAGSとCPPFLAGSで挙動が異なるMakefileを書いてみる。

実際に以下のコマンドでmakeする。

それぞれ実行した時の出力を見るとCXXFLAGSとCPPFLAGSの違いが出てくる。

CプリプロセッサはCとC++の両方で使われるため、CPPFLAGSはどちらのソースコードをコンパイルする時でも使われる。
CPPFLAGSをC++コンパイラのオプションと勘違いしてMakefileを書くと、CコンパイラにもC++コンパイラのオプションまで渡されてしまう。

ではCPPFLAGSの正しい使い方はと言うとインクルードパスを指定するのに使うそうだ。