2010-06-03 100 views
22

我有一個Makefile文件具有聲明在Makefile中,CC?=是什麼意思?

CC?=gcc 

改變它

CC?=g++ 

不使其與G ++編譯的C程序。將其更改爲

CC=g++ 

是否讓它使用g ++。

所以我想知道?=操作符是幹什麼的?我的猜測是,它看着一個環境變量來決定使用哪個編譯器,如果它沒有設置,然後使用gcc?任何人都可以清除它?

回答

29

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

有變量,'=」另一個賦值運算符 ?這被稱爲 條件變量賦值 運算符,因爲如果該變量尚未定義 ,則它僅具有 效果。本聲明:

FOO ?= bar 

完全等同於本(見 起源功能):

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

也許CC已經被定義爲gcc,所以CC ?= g++不會覆蓋現有gcc

5

?=操作員設置,只有當它是不是已經設置變量:info make* Using Variables* Setting

0

正如其他人所提到的,它很可能已經預先定義。

在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似乎目前不可能。