2017-05-27 3 views
0

Ich versuche mit CMake einzuführen, um mein C++ - Projekt zu erstellen. Wenn ich make ausführe bekomme ich einen Fehler:CMake target_compile_features ungeordnete_map

[ 11%] Building CXX object CMakeFiles/game.dir/InputHandler.cpp.o 
In file included from /usr/include/c++/5/unordered_map:35:0, 
... 
/usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options. 
#error This file requires compiler and library support... 

Ich weiß, das ist, weil CMake nicht C++ 11 aufgerufen wird, wenn es ihn braucht, um die Verwendung des unordered_map zu ermöglichen. Nach dem googeln muss ich target_compile_features() in meiner CMakeLists.txt verwenden. Aber ich kann nirgendwo finden, was mir die Syntax/Argumente gibt, die ich verwenden muss, es gibt nur Beispiele, z. auf der CMake Seite gibt es:

add_library(mylib requires_constexpr.cpp) 
target_compile_features(mylib PRIVATE cxx_constexpr) 

Aber ich brauche cxx_constexpr nicht, ich weiß nicht einmal, was das ist. Ich brauche unordered_map.

Kann jemand mir die Syntax erklären, die ich bitte verwenden muss, vorzugsweise gebe mir eine Art Verweis auf gültige Werte, um in diese Funktion zu gehen.

Antwort

0

std::unordered_map Teil der STL ist, ist es nicht eine Sprache Schlüsselwort wie constexpr oder override usw. CMake bietet keine Funktionen für die STL-Funktionalität kompiliert (das wäre eine überwältigende Aufgabe zu implementieren sein!). In Ihrem Fall möchten Sie CMake nur mitteilen, dass Sie C++ 11 benötigen. This article bietet alle Details, die Sie zu diesem Thema benötigen, aber es für diese spezielle Frage, das Hinzufügen der folgenden in der Nähe der Spitze Ihrer CMakeLists.txt Datei zusammenfassen sollten Sie geben, was Sie brauchen:

set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_CXX_STANDARD_REQUIRED ON) 
set(CMAKE_CXX_EXTENSIONS OFF) 
Verwandte Themen