web-dev-qa-db-ja.com

makefileのCXXの値はどこから来ますか?

コードスニペット:

target_test : test.cc 
    $(CXX) $(CPPFLAGS) $(CFLAGS) test.cc

CXXは変数(呼び出すコンパイラコマンドを含む)であることは知っていますが、この変数はどこから来たのだろうと思っていました。変数はメイクファイルで定義されておらず、環境変数でもありません。 CXXの値がどこから来たのか、誰でも説明できますか?

41
Ananke Leda

Makeにはいくつかの 事前定義変数 があり、その中にはCCがあります。最初は、インストールされたCコンパイラへのシンボリックリンクであるccに設定されます。

$ readlink -f `which cc`
/usr/bin/gcc-4.6

また:

$ readlink -f `which c++`
/usr/bin/g++-4.6

必要に応じて変更できます。

make -p -f /dev/nullを使用して、すべての暗黙のルールと変数のリストを取得できます。非標準のインストールがあり、出力が英語ではないため、現在出力を表示できません。

34
Mihai Maruseac

CXXはGNU make。 他にもあります の暗黙変数です。

それだけでなく、これらの暗黙的な変数は 暗黙の規則 で使用されます。

暗黙のルールによるCXXの使用方法に関する抜粋を次に示します。

C++プログラムのコンパイル
_n.o_は、_n.cc_、_n.cpp_、または_n.C_から次の形式のレシピで自動的に作成されます。
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
C++ソースファイルには、「。C」の代わりに接尾辞「.cc」を使用することをお勧めします。

17
ArjunShankar

CXXの値がどこから来たのか、誰でも説明できますか?

他の「魔法の」変数(LDRMMAKE)と同様に、makeによって内部的に事前定義されています。

2
Konrad Rudolph

これは、ユーザーがオーバーライドできる変数であり、デフォルト値g++(GNU Makeバージョンでは、少なくとも)。それ以上のことは何もありません(いくつかのファイルまたはそのようなもので定義されていません)。

ソース: The GNU Make Manual

0
Norswap