2014-10-27 90 views
0

我似乎有一個問題讓我的makefile正確構建我的C++文件。我的makefile代碼如下所示;我正在編譯的文件名爲「avl.cc」(它正在工作並正確編譯)。Makefile使用C++代替g ++ - 爲什麼?

CC=g++ 
CFLAGS=-g -O2 
PROGS=avl 

all: $(PROGS) 

[email protected]: 
    $(CC) $(CFLAGS) [email protected] [email protected] 

.PHONY: clean 
clean: 
    rm $(PROGS) 

然而,當我輸入命令makemake all,我得到

c++  avl.cc -o avl 

和調試符號我想從-g標誌不上來。一個類似的makefile(只更改PROGS變量)爲類似的項目工作,所以我不知道我做錯了什麼。有沒有人有任何提示?謝謝!

+2

運行'make -p'。你需要'CXX = g ++'和'CXXFLAGS = -Wall -g -O2';也可以用'remake'作爲'remake -x'和(如果你的GNU'make'已經足夠近了)'make --trace' – 2014-10-27 16:54:33

+1

你期待'$ @:'作爲你要做的目標嗎?因爲你所期待的不是這樣。該變量在make處理中不存在。 – 2014-10-27 16:54:51

回答

1

您沒有「avl」的目標,因此請使用默認規則。

嘗試改變的makefile這樣:

CC=g++ 
CFLAGS=-g -O2 
PROGS=avl 

all: $(PROGS) 

$(PROGS): 
    $(CC) $(CFLAGS) -o [email protected] [email protected] 

.PHONY: clean 
clean: 
    rm $(PROGS) 
1

Makefile documentation about automatic variables

到你所認識的範圍有限,其中 自動變量值可用這是非常重要的:他們只有內的值 的食譜。特別是,您不能在規則的 目標列表中的任何地方使用它們;它們在那裏沒有價值,並且將擴展爲空字符串 。

所以你不能使用[email protected]作爲一項規則,這意味着Makefile文件的默認C++編譯規則使用,因爲你沒有使用好的變量名,它們也將被忽略。

替代CC通過CXXCFLAGS通過CXXFLAGS對於C++。