2013-11-24 52 views
0

我正在寻找使用C++ unordered_map数据结构,但我认为我没有正确传递-std = C++ 11选项。包括-std = C++ 11正确的编译器选项

  1. main.cpp包含main()。
  2. A.cpp需要使用unorder_map DS。
  3. A.cpp和B.cpp通过main.cpp访问。还有一个支持头文件main.h。

的makefile中的一套方案如下所示:

CC = g++ 
SRC = main.cpp B.cpp A.cpp 
HDR = main.h 
OBJ = main.o B.o A.o 
FLAGS = -std=c++11 

all: main 
    $(CC) -o main $(OBJ) $(FLAGS) 

我得到一个错误,告诉我,A.cpp不知道该选项-std = C++ 11的。如果你能让我知道我出错的地方,那将是非常好的。

+0

什么编译器和版本您使用的?对于gcc 4.3到4.6,标志应该是'-std = C++ 0x'。 –

+0

它是g ++ 4.7.1,但是第一个答案中解决了Makefile的问题。 – progfan

回答

0

看来,加入后,下面的“所有:主”,“使”成功:

A.o: A.cpp 
    g++ -c A.cpp $(FLAGS) 
+1

编译器标志用于编译,而不是链接,因此您需要将它们传递给编译器,而不是链接器(编译器将源文件编译为.obj文件,链接器将这些.obj文件组合到可执行文件中)。所以是的,这是国旗的正确位置。顺便说一句,你通常使用CXX_FLAGS C++编译器标志。 – Thomas

+0

感谢您提供这方面的信息。看来我一直在做这件事。 – progfan

+2

C++编译器标志的内置宏实际上是'CXXFLAGS' – MadScientist