52

代码片段:

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

我知道这CXX是一个变量(包含要调用的编译器命令),但我想知道这个变量是从哪里来的。该变量未在 makefile 中定义,也不是环境变量。谁能解释 的价值CXX来自哪里?

4

4 回答 4

47

Make 有几个预定义的变量,其中是CC. 最初,它被设置为cc指向已安装 C 编译器的符号链接:

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

还:

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

如果你愿意,你可以改变它。

您可以使用make -p -f /dev/null来获取所有隐式规则和变量的列表。我现在无法显示输出,因为我有一个非标准安装并且输出不是英文的。

于 2012-07-09T12:13:14.463 回答
19

CXX 是 GNU make 中的一个隐式变量。还有其他人

不仅如此,这些隐式变量还被用于隐式规则

这是与隐式规则如何使用 CXX 相关的摘录:

编译 C++ 程序
n.o是由n.ccn.cppn.C使用形式的配方自动生成的
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
我们鼓励您对 C++ 源文件使用后缀“.cc”而不是“.C”。

于 2012-07-09T12:08:02.890 回答
2

谁能解释 的价值CXX来自哪里?

像其他“魔法”变量(LD, RM, MAKE)一样,它是由 make 内部预定义的。

于 2012-07-09T12:08:13.770 回答
0

这是一个用户可以覆盖的变量,它具有默认值g++(至少在 GNU Make 版本中)。它没有更多的东西(它没有在某些文件或类似的东西中定义)。

来源:GNU Make 手册

于 2012-07-09T12:08:16.810 回答