我有一个具有声明的 C 程序的 Makefile
CC?=gcc
将其更改为
CC?=g++
不会让它用 g++ 编译。将其更改为
CC=g++
确实使它使用g ++。
所以我想知道 ?= 运算符是做什么的?我的猜测是它会查看一个环境变量来决定使用哪个编译器,如果没有设置,那么使用 gcc?任何人都可以清除这个?
来自http://www.gnu.org/software/make/manual/make.html:
变量还有另一个赋值运算符,`?='。这称为条件变量赋值运算符,因为它仅在变量尚未定义时才有效。这个说法:
FOO ?= bar
完全等价于这个(参见原点函数):
ifeq ($(origin FOO), undefined) FOO = bar endif
可能CC
已经定义为gcc
,所以CC ?= g++
不会覆盖现有的 gcc
.
运算符仅在?=
尚未设置变量时设置变量:info make
→ * Using Variables
→ * Setting
。
正如其他人提到的,它可能已经预定义。
在 GNU 上,您可以make -p
从不包含Makefile
.
这记录在:https ://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
通常,CC=cc
默认情况下。然后在 Ubuntu 14.04 上,例如,cc
通常是指向gcc
.
要一次禁用所有变量,请参阅:从 make 文件中禁用 make builtin 规则和变量似乎目前是不可能的。
这 ”?” 运算符表示已设置(如果尚未设置)。
所以,如果 CC 已经是空白 CC?= 将设置它。如果 CC 已经包含某些内容,则不会。
来源:http ://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-03/msg02057.html