c-makefile中不需要的环境变量



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

CC?=$(SOMETHING)

这是必要的,因为文件有时由定义不同编译器的脚本调用。这以前工作得很好,但在我的新Linux安装中,当我运行make时,我发现CC已经在某个地方被定义为"CC",这是我不想要的。它不在我的shell环境中。这就像make有自己的私人环境。它是从哪里来的,我该如何处理它(而不更改Makefile(?

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

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

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

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

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

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

有关完整解释,请参阅GNU make手册的"原始函数"部分。

最新更新