【发布时间】:2012-07-08 19:52:49
【问题描述】:
代码片段:
target_test : test.cc
$(CXX) $(CPPFLAGS) $(CFLAGS) test.cc
我知道CXX 是一个变量(包含要调用的编译器命令),但我想知道这个变量是从哪里来的。该变量未在 makefile 中定义,也不是环境变量。谁能解释一下CXX 的值是从哪里来的?
【问题讨论】:
代码片段:
target_test : test.cc
$(CXX) $(CPPFLAGS) $(CFLAGS) test.cc
我知道CXX 是一个变量(包含要调用的编译器命令),但我想知道这个变量是从哪里来的。该变量未在 makefile 中定义,也不是环境变量。谁能解释一下CXX 的值是从哪里来的?
【问题讨论】:
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 获取所有隐式规则和变量的列表。我现在无法显示输出,因为我有一个非标准安装并且输出不是英文的。
【讨论】:
这是一个用户可以覆盖的变量,默认值为g++(至少在 GNU Make 版本中)。它没有更多内容(它没有在某些文件或类似的东西中定义)。
【讨论】:
谁能解释
CXX的值从何而来?
与其他“神奇”变量(LD、RM、MAKE)一样,它是由 make 内部预定义的。
【讨论】:
CXX 是 GNU make 中的一个隐式变量。 There are others too.
不仅如此,这些隐式变量还在implicit rules中使用。
以下是关于隐式规则如何使用 CXX 的摘录:
编译 C++ 程序
n.o由n.cc、n.cpp或n.C自动生成 形式$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c.
我们鼓励您对 C++ 源文件使用后缀“.cc”而不是“.C”。
【讨论】: