我目前在使用C ++项目时遇到问题。我需要一些C ++ 11提供的工具,但是当我想用Makefile编译时,我有错误:
错误此文件需要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 $@ -c $< $(CXXFLAGS)
clean:
rm -rf *.o
mrproper: clean
rm -rf tablut
有趣的是,如果输入命令g ++ -c std = c ++ 11,我的代码就会编译...
我做错了什么?
NB:我尝试使用标志-std = c ++ 11,-std = c ++ 0x和-std = gnu ++ 11
答案 0 :(得分: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
这可能是你想要的。