我试图使用CMake来构建我的C ++项目。当我运行make时出现错误:
[ 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...
我意识到这是因为CMake在需要时不会调用C ++ 11以便能够使用unordered_map。谷歌搜索后我知道我需要在我的CMakeLists.txt中使用target_compile_features()。但我无法找到任何可以提供我需要使用的语法/参数的地方,例如,例如在CMake页面上它给出了:
add_library(mylib requires_constexpr.cpp)
target_compile_features(mylib PRIVATE cxx_constexpr)
但我不需要cxx_constexpr,我甚至都不知道那是什么。我需要unordered_map。
任何人都可以告诉我需要使用的语法,最好给我一些有效值的参考,以传递给该函数。
答案 0 :(得分:0)
std::unordered_map
是STL的一部分,它不是constexpr
或override
等语言关键字.CMake不为STL功能提供编译功能(即实施的压倒性任务!)。在你的情况下,你真的只想告诉CMake你需要C ++ 11。 This article提供了有关此主题所需的所有详细信息,但为了解决此特定问题,请在CMakeLists.txt
文件顶部附近添加以下内容,以便为您提供所需内容:
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)