2015-10-25 136 views
2

我目前有一個C++項目的問題。我需要一些與C++ 11一起提供的工具,但是當我想用Makefile編譯時,出現以下錯誤:用makefile和C++編譯時出錯11

錯誤此文件需要ISO C++ 2011標準的編譯器和庫支持。此支持目前是實驗性的,必須使用-std = C++ 11或-std = gnu ++ 11編譯器選項啓用。

這裏是我的Makefile:

.PHONY: clean, mrproper 

# var 
CXX = g++ 
EXEC = tablut 
LDFLAGS = 
CXXFLAGS = -std=c++11 -Wall -Wextra 
SRC= partie.cpp pawn.cpp playground.cpp 
OBJ= $(SRC:.c=.o) 

# commands 
    all: $(EXEC) 

tablut: $(OBJ) 
    $(CXX) -o tablut $(OBJ) $(LDFLAGS) 

%.o: %.cpp 
    $(CXX) -o [email protected] -c $< $(CXXFLAGS) 

clean: 
    rm -rf *.o 

mrproper: clean 
    rm -rf tablut 

有趣的是,我的代碼編譯,如果我輸入命令G ++ -c STD = C++ 11 ...

我是怎麼做錯了 ?

注:我試圖與標誌-std = C++ 11,-std =的C++ 0x和-std = GNU ++ 11

+0

您可以包含運行'make'的輸出嗎? –

+0

它甚至可以使用這個'OBJ = $(SRC:.c = .o)'?它應該是'OBJ = $(SRC:.cpp = .o)' –

+0

@AlexLop .:因爲'$(OBJ)== $(SRC)'觸發的唯一規則是'tablut'。 –

回答

6

你有規則:

OBJ= $(SRC:.c=.o) 

這意味着$(OBJ)結束是:

OBJ= partie.cpp pawn.cpp playground.cpp 

因爲他們都不符合.c。你大概的意思寫:

OBJ= $(SRC:.cpp=.o) 

隨着該修補程序,運行make生成:

$ make 
g++ -o partie.o -c partie.cpp -std=c++11 -Wall -Wextra 
g++ -o pawn.o -c pawn.cpp -std=c++11 -Wall -Wextra 
g++ -o playground.o -c playground.cpp -std=c++11 -Wall -Wextra 
g++ -o tablut partie.o pawn.o playground.o 

這很有可能就是你想要的。

+0

通常,當某些東西不起作用時,這是因爲某些stupud錯誤。謝謝 :) – Raphallal