2012-07-09 74 views
30

代碼段:makefile中CXX的值來自哪裏?

target_test : test.cc 
    $(CXX) $(CPPFLAGS) $(CFLAGS) test.cc 

我知道CXX是一個變量(包含編譯命令調用),但我想知道這個變量從何而來。該變量未在makefile中定義,也不是環境變量。任何人都可以解釋CXX的價值來自哪裏?

回答

29

製作有幾個predefined variables其中之一就是CC。最初,它被設置在cc這是一個符號鏈接到已安裝的C編譯器:

$ readlink -f `which cc` 
/usr/bin/gcc-4.6 

另外:

$ readlink -f `which c++` 
/usr/bin/g++-4.6 

你可以改變它,如果你想要的。

您可以使用make -p -f /dev/null來獲取所有隱式規則和變量的列表。我現在無法顯示輸出,因爲我有一個非標準的安裝,輸出不是英文的。

+3

例如:$ make -p -f/dev/null | grep CXX給出: CXX = g ++ – ady 2015-09-03 20:02:39

15

CXX是GNU make中的隱式變量。 There are others too

不僅如此,這些隱式變量可用於implicit rules

在這裏被提取有關CXX是如何使用的隱式規則:

編譯的C++程序
n.on.ccn.cpp,或n.C自動進行與以下形式的配方
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
我們鼓勵您使用後綴'.cc'作爲C++源文件而不是'.C'。

1

誰能解釋其中的CXX的價值從何而來?

像其他「神奇」的變量都(LDRMMAKE),它是由內部化妝預定義。

0

這是一個用戶可以覆蓋的變量,其默認值爲g++(至少在GNU Make版本中)。沒有什麼比它更多的了(它沒有在某些文件或類似的東西中定義)。

來源:The GNU Make Manual