2013-11-24 50 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