代码段:
target_test : test.cc
$(CXX) $(CPPFLAGS) $(CFLAGS) test.cc
我知道CXX
是一个变量(包含要调用的编译器命令),但我想知道这个变量来自哪里。该变量未在makefile中定义,也不是环境变量。任何人都可以解释CXX
的价值来自何处?
答案 0 :(得分:34)
Make有几个predefined variables,其中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
获取所有隐式规则和变量的列表。我现在无法显示输出,因为我有非标准安装,输出不是英文。
答案 1 :(得分:17)
CXX是GNU make中的隐式变量。 There are others too
不仅如此,这些隐式变量也在implicit rules中使用。
以下是与隐式规则如何使用CXX有关的摘录:
编译C ++程序
n.o
自动从n.cc
,n.cpp
或n.C
制作$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
形式的 {{1}}。
我们建议您对C ++源文件使用后缀“.cc”而不是“.C”。
答案 2 :(得分:2)
任何人都可以解释
CXX
的价值来自何处?
与其他“神奇”变种(LD
,RM
,MAKE
)一样,它是由make在内部预定义的。
答案 3 :(得分:0)
这是一个用户可以覆盖的变量,其默认值为g++
(至少在GNU Make版本中)。它没有更多的东西(它没有在某些文件或类似的东西中定义)。