【问题标题】:Unwanted environment variables in makefilemakefile 中不需要的环境变量
【发布时间】:2020-12-22 16:57:21
【问题描述】:

我有一个 Makefile,它有条件地定义编译器,如下所示:

CC?=$(SOMETHING)

这是必要的,因为该文件有时由定义不同编译器的脚本调用。 这曾经可以正常工作,但是在我的新 Linux 安装中,当我运行 make 时,我发现 CC 已经在某个地方定义为“cc”,这是我不想要的。 它不在我的 shell 环境中。就像 make 有它自己的私有环境一样。它来自哪里,我怎样才能摆脱它(不更改 Makefile)?

【问题讨论】:

  • cc 是 GNU make 中 CC 的默认值:gnu.org/software/make/manual/html_node/Implicit-Variables.html(在同一页面上还提到了使用 -R 摆脱这些默认值的可能性)跨度>
  • COMPILER?=$(SOMETHING) 然后CC=$(COMPILER)
  • 嗯,这就解释了。现在的问题是为什么它一开始就起作用了……

标签: c makefile environment-variables


【解决方案1】:

cc 是 GNU Make 中 CC 的默认/隐式值,请参阅 gnu.org/software/make/manual/html_node/Implicit-Variables.html(感谢 Paul R)

绕过它的一种方法是在中间添加一个变量(感谢 Matheus):

COMPILER?=$(SOMETHING)
CC=$(COMPILER)

也可以通过像make --no-builtin-variables 这样调用make 来抑制所有隐式变量,尽管这也会抑制所有隐式规则。

【讨论】:

    【解决方案2】:

    如果您使用 GNU make 并且不希望应用默认值 CC,您可以使用 origin 函数和 ifeq 条件来摆脱它:

    ifeq ($(origin CC),default)
    CC = $(SOMETHING)
    else
    CC ?= $(SOMETHING)
    endif
    

    完整说明请参见The origin Function section of the GNU make manual

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      相关资源
      最近更新 更多