【问题标题】:Where does the value of CXX in a makefile come from?makefile 中 CXX 的值从何而来?
【发布时间】:2012-07-08 19:52:49
【问题描述】:

代码片段:

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

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

【问题讨论】:

    标签: c++ c makefile


    【解决方案1】:

    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 获取所有隐式规则和变量的列表。我现在无法显示输出,因为我有一个非标准安装并且输出不是英文的。

    【讨论】:

    • 例如:$ make -p -f /dev/null | grep CXX 给出:CXX = g++
    【解决方案2】:

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

    来源:The GNU Make Manual

    【讨论】:

      【解决方案3】:

      谁能解释CXX 的值从何而来?

      与其他“神奇”变量(LDRMMAKE)一样,它是由 make 内部预定义的。

      【讨论】:

        【解决方案4】:

        CXX 是 GNU make 中的一个隐式变量。 There are others too.

        不仅如此,这些隐式变量还在implicit rules中使用。

        以下是关于隐式规则如何使用 CXX 的摘录:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-19
          • 2015-08-02
          • 1970-01-01
          • 2022-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多