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

inq*_*uam 26 gcc makefile g++ cc

我有一个包含声明的C程序的Makefile

CC?=gcc
Run Code Online (Sandbox Code Playgroud)

把它改成

CC?=g++
Run Code Online (Sandbox Code Playgroud)

不会用g ++编译它.把它改成

CC=g++
Run Code Online (Sandbox Code Playgroud)

是否使用g ++.

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

ken*_*ytm 34

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

变量有另一个赋值运算符,`?='.这称为条件变量赋值运算符,因为它仅在尚未定义变量时才有效.这个说法:

 FOO ?= bar
Run Code Online (Sandbox Code Playgroud)

与此完全等效(参见原点函数):

 ifeq ($(origin FOO), undefined)
   FOO = bar
 endif
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*tos 5

?=运营商将仅当它是不是已经设置变量:info make→交通* Using Variables→交通* Setting.


Cir*_*四事件 5

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

\n

在 GNU 上,您可以make -p从不包含Makefile.

\n

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

\n
\n

抄送

\n

编译C程序的程序;默认 \xe2\x80\x98cc\xe2\x80\x99。

\n
\n

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

\n

要立即禁用所有变量,请参阅:从 make 文件内部禁用 make 内置规则和变量目前似乎不可能。

\n