CC?=在Makefile中是什么意思?

31

我有一个用于C程序的Makefile文件,其中有以下声明:

CC?=gcc

将其更改为

CC?=g++

将其更改为并不能使其在g++中编译。

CC=g++

确实可以使用g++。

那么我想知道 ?= 运算符是什么意思?我的猜测是它查看环境变量以决定使用哪个编译器,如果没有设置则使用gcc?有人能够澄清一下吗?

4个回答

43

来源于http://www.gnu.org/software/make/manual/make.html:

还有另一种变量赋值运算符 `?=',称为条件变量赋值运算符,因为仅在变量未定义时才起作用。该语句:

 FOO ?= bar

这与以下代码完全等价(参见原始函数):

 ifeq ($(origin FOO), undefined)
   FOO = bar
 endif
可能CC已经被定义为gcc了,所以CC ?= g++不会覆盖现有的gcc

6
?= 运算符仅在变量未被设置时才设置变量:info make* 使用变量* 设置

5
正如其他人提到的,很可能已经预定义了。
在GNU上,您可以使用make -p命令查看未包含Makefile的目录中定义了什么。
这在https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html上有记录。

CC

编译C程序的程序;默认为“cc”。

通常情况下,默认值为CC=cc。例如,在Ubuntu 14.04上,cc通常是指向gcc的符号链接。
要一次性禁用所有变量,请参见:Disable make builtin rules and variables from inside the make file。目前似乎不可能。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接