我有一個Makefile文件具有聲明在Makefile中,CC?=是什麼意思?
CC?=gcc
改變它
CC?=g++
不使其與G ++編譯的C程序。將其更改爲
CC=g++
是否讓它使用g ++。
所以我想知道?=操作符是幹什麼的?我的猜測是,它看着一個環境變量來決定使用哪個編譯器,如果它沒有設置,然後使用gcc?任何人都可以清除它?
我有一個Makefile文件具有聲明在Makefile中,CC?=是什麼意思?
CC?=gcc
改變它
CC?=g++
不使其與G ++編譯的C程序。將其更改爲
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/Implicit-Variables.html
通常,CC=cc
默認:
這在被記錄在案。然後在Ubuntu 14.04上,例如,cc
通常是到gcc
的符號鏈接。
要一次禁用所有變量,請參閱:Disable make builtin rules and variables from inside the make file似乎目前不可能。