2016-09-07 53 views
1

我在使用lambda函數的小型學校任務複雜化,所以它需要gcc調用中的'-std = C++ 11'。然而,make文件的輸出似乎表明它沒有被添加。我沒有鏈接問題,所以沒有必要在這裏複製所有的源代碼。在生成文件中無法識別CFLAGS

這裏是我的makefile:

CC=g++ 
CFLAGS= -std=c++11 -I. -Wall 
DEPS = wordarray.h 
OBJ = ayalajL03b.o wordarray.o 

%.o: %.c $(DEPS) 
     $(CC) -c -o [email protected] $< $(CFLAGS) 

L03b.out: $(OBJ) 
     $(CC) -o [email protected] $^ $(CFLAGS) 

.PHONY: clean 

clean: 
     rm -f -v *.o 
     rm -f -v *.out 

這裏是輸出:

[[email protected] Lab03]$ make 
g++ -c -o wordarray.o wordarray.cpp 
wordarray.cpp:28:77: warning: lambda expressions only available with -std=c++11 or =gnu++11 
    counter([](char a)->bool{return !isvowel(a) && !isdigit(a) && isalpha(a);}, Worount].word); 

請幫助我瞭解我在做什麼錯。

+1

可能的重複[如何在gcc中啓用C++ 11](http://stackoverflow.com/questions/16886591/how-do-i-enable-c11-in-gcc) –

+1

使用'CXX '和'CXXFLAGS'。刪除你的'%.o:%.c'的規則,它不適用於'.cpp'文件,然後重試。 Make使用'CXX'和'CXXFLAGS'變量''.cpp'文件來建立'.o'目標的預定義(在製作術語中是「隱含的」)規則。 – Andrew

回答

5

你的規則是

%.o: %.c $(DEPS) 

,但你編譯.cpp文件。

隱含的make規則爲.cpp源文件將被使用。

要麼改變你的規則

%.o: %.cpp $(DEPS) 

或設置的隱含規則使用的CXXFLAGS變量。

+0

謝謝,我明白了。這工作。 – Iramch