Gcc 生成文件中的CC?=是什么意思?

Gcc 生成文件中的CC?=是什么意思?,gcc,makefile,g++,cc,Gcc,Makefile,G++,Cc,我有一个C程序的Makefile,它有声明 CC?=gcc 改成 CC?=g++ CC=g++ 不能用g++编译。改成 CC?=g++ CC=g++ 它使用的是g++ 我想知道接线员是干什么的?我的猜测是,它通过查看环境变量来决定使用哪个编译器,如果没有设置,那么使用gcc?任何可以清除此项的人?只有在尚未设置变量时,?=运算符才会设置该变量:info make→ *使用变量→ *设置来自: 还有另一个赋值运算符 对于变量,`?='。这就是所谓的 条件变量赋值 运算符,因为它只有一个

我有一个C程序的Makefile,它有声明

CC?=gcc
改成

CC?=g++
CC=g++
不能用g++编译。改成

CC?=g++
CC=g++
它使用的是g++


我想知道接线员是干什么的?我的猜测是,它通过查看环境变量来决定使用哪个编译器,如果没有设置,那么使用gcc?任何可以清除此项的人?

只有在尚未设置变量时,
?=
运算符才会设置该变量:
info make
→ <代码>*使用变量→ <代码>*设置

来自:

还有另一个赋值运算符 对于变量,`?='。这就是所谓的 条件变量赋值 运算符,因为它只有一个 如果变量尚未被激活,则会产生影响 定义本声明:

 FOO ?= bar
与此完全相同(参见 原点函数):

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

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

因此,如果CC已经为空,CC?=将设置它。如果CC已经包含某些内容,则不会


来源:

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

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

该文件记录在:

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

要同时禁用所有变量,请参见:目前似乎不可能