2015-10-25 96 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