【发布时间】:2020-08-31 14:51:09
【问题描述】:
我有一个 GNU Makefile,顶部设置了一些默认值。其中之一是
CC ?= gcc
后来,我有了类似的食谱
file.o: file.c ...
$(CC) -c $<
但是,在没有其他参数的情况下调用 make 会产生类似的输出
cc -c file.c
为什么不遵守“gcc”的默认值以及为什么要插入这个其他值?如果有帮助,我在 Mac 上。
【问题讨论】:
我有一个 GNU Makefile,顶部设置了一些默认值。其中之一是
CC ?= gcc
后来,我有了类似的食谱
file.o: file.c ...
$(CC) -c $<
但是,在没有其他参数的情况下调用 make 会产生类似的输出
cc -c file.c
为什么不遵守“gcc”的默认值以及为什么要插入这个其他值?如果有帮助,我在 Mac 上。
【问题讨论】:
因为 CC 是 GNU Make 的内置变量,在读取 makefile(到 cc)之前隐式设置,?= 仅在未设置(未定义)时设置变量。
尽管如此,您仍可以使用:= 进行设置,但我认为这不是您想要的。
您可以使用选项 --no-builtin-variables 运行 make 来阻止 GNU Make 设置内置变量。这将像您想要的那样工作,但代价是每次调用 make 时都需要该选项,并且所有其他内置变量都需要由 makefile 显式定义。
【讨论】: