我有一个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手册的"原始函数"部分。