我有一个具有声明的C程序的制作费

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* Using Variables* Setting.

这 ”?”操作员意味着设置(如果尚未设置)。

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

资源: http://unix.derkeiler.com/mailing-lists/freebsd/questions/2007-03/msg02057.html

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

在GNU上,您可以看到定义的内容 make -p 来自不包含一个目录 Makefile.

这是在以下记录的 https://www.gnu.org/software/make/manual/html_node/implitic-variables.html

通常, CC=cc 默认。然后在Ubuntu 14.04上使用,例如 cc 通常是一个符号链接 gcc.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top