我有一个用于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
→ * 使用变量
→ * 设置
。make -p
命令查看未包含Makefile
的目录中定义了什么。通常情况下,默认值为CC
编译C程序的程序;默认为“cc”。
CC=cc
。例如,在Ubuntu 14.04上,cc
通常是指向gcc
的符号链接。