使用makefile和c ++ 11进行编译时出错

时间:2015-10-25 19:40:30

标签: c++ c++11 makefile

我目前在使用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

1 个答案:

答案 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 

这可能是你想要的。