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

时间:2010-06-03 12:23:33

标签: gcc makefile g++ cc

我有一个带有声明

的C程序的Makefile
CC?=gcc

将其更改为

CC?=g++

不会使用g ++进行编译。将其更改为

CC=g++

是否使用g ++。

所以我想知道?=运算符是做什么的?我的猜测是它查看环境变量来决定使用哪个编译器,如果没有设置则使用gcc?谁能清除这个?

4 个答案:

答案 0 :(得分:33)

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

  

还有另一个赋值运算符   对于变量,`?='。这被称为a   条件变量赋值   运营商,因为它只有一个   如果变量尚未生效   定义。这句话:

 FOO ?= bar
     

与此完全相同(参见The   起源函数):

 ifeq ($(origin FOO), undefined)
   FOO = bar
 endif

可能CC已定义为gcc,因此CC ?= g++不会覆盖现有的gcc

答案 1 :(得分:5)

?=运算符仅在尚未设置变量时才设置变量:info make* Using Variables* Setting

答案 2 :(得分:2)

“?”运算符表示如果尚未设置则设置。

所以,如果CC已经空白CC?=将设置它。如果CC已包含某些内容,则不会。

来源:http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-03/msg02057.html

答案 3 :(得分:1)

正如其他人所提到的,它可能已经预定义了。

在GNU上,您可以从不包含make -p的目录中查看使用Makefile定义的内容。

记录于:https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

通常默认为CC=cc。然后在Ubuntu 14.04上,例如,cc通常是gcc的符号链接。

要立即禁用所有变量,请参阅:Disable make builtin rules and variables from inside the make file似乎目前无法使用。