2016-09-07 6 views
1

ラムダ関数を使用する小規模の学校割り当てが複雑になるので、gcc呼び出しで '-std = C++ 11'が必要です。しかし、makeファイルの出力は、追加されていないことを示しているようです。私はリンクの問題がないので、ここにすべてのソースをコピーする必要はありません。ここでCFLAGSはメイクファイルで認識されません

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'です。とにかく '.cpp'ファイルには適用されない'%.o:%.c'のルールを削除し、もう一度やり直してください。 Makeは、 'CXX'と' CXXFLAGS'変数を使う '.cpp'ファイルから' .o'ターゲットを構築するためのルールを定義しています。 – Andrew

答えて

5

あなたのルールが

%.o: %.c $(DEPS) 

ですが、.cppファイルをコンパイルしています。

ソースファイル.cppの暗黙のmakeルールが使用されます。

どちらか

%.o: %.cpp $(DEPS) 

あるいは暗黙のルールで使用されるCXXFLAGS変数を設定するには、ルールを変更します。

+0

ありがとう、私は理解しています。そして、これはうまくいった。 – Iramch

関連する問題