我有一个GNU Makefile,在顶部设置了一些默认值。其中之一是
CC ?= gcc
后来,我有类似的食谱
file.o: file.c ...
$(CC) -c $<
但是,在没有其他参数的情况下调用make
会产生类似
cc -c file.c
为什么不遵守默认值“ gcc”,为什么还要插入其他值?如果有帮助,我在Mac上。
答案 0 :(得分:1)
因为CC是GNU Make的内置变量,在读取makefile(至cc)之前会隐式设置,?=
仅在未设置(未定义)的情况下设置变量。
尽管如此,您仍可以使用:=
进行设置,但我认为这不是您想要的。
您可以运行带有选项--no-builtin-variables
的make来阻止GNU Make设置内置变量。这将按您希望的方式工作,但是每次调用make时都需要使用该选项,而所有其他内置变量都需要由makefile显式定义。