C++ 使用SDL2.0和C++;11

C++ 使用SDL2.0和C++;11,c++,c++11,cmake,C++,C++11,Cmake,使用CMake编译C++11/SDL2.0代码时遇到一些问题。CmakeList非常简单: cmake_minimum_required(VERSION 2.6) project(Test) include(FindPkgConfig) pkg_search_module(SDL2 REQUIRED sdl2) include_directories(${SDL2_INCLUDE_DIRS}) target_link_libraries(sdl2test ${SDL2_LIBRARIES})

使用CMake编译C++11/SDL2.0代码时遇到一些问题。CmakeList非常简单:

cmake_minimum_required(VERSION 2.6)
project(Test)

include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2)
include_directories(${SDL2_INCLUDE_DIRS})
target_link_libraries(sdl2test ${SDL2_LIBRARIES})

add_definitions(-std=c++0x)
add_executable(Test src/main.cpp)
但是,在编译时,我收到以下错误:

Scanning dependencies of target Test
[100%] Building CXX object CMakeFiles/Test.dir/src/main.cpp.o
/var/dev/cmake/src/main.cpp: In function ‘int main(int, char**)’:
/var/dev/cmake/src/main.cpp:11:16: error: ‘nullptr’ was not declared in this scope
/var/dev/cmake/src/main.cpp:17:16: error: ‘nullptr’ was not declared in this scope
make[2]: *** [CMakeFiles/Test.dir/src/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Test.dir/all] Error 2
make: *** [all] Error 2
cmake版本2.8.9和gcc 4.7.2。关于如何在CMake中正确使用C++11特性,有什么想法吗

ps:我也尝试过-std=c++11实际上是用于设置预处理器定义的。您需要在此处设置
CMAKE\u CXX\u标志

set(CMAKE_CXX_标志“${CMAKE_CXX_标志}-std=c++11”)

您删除了
添加定义
调用我的假设?你能运行
make VERBOSE=1
并粘贴输出吗?你能在一个干净的构建文件夹中从头开始吗?
set
命令绝对正确;我经常使用它。我刚刚检查过,您的原始
add_定义(-std=c++0x)
实际上也应该可以工作,即使它不是预处理器定义。您可以使用检查标志是否传递。只需将CMakeLists.txt复制到一个文件夹,
cd
到该文件夹,然后尽可能运行,但我在示例CMakeLists.txt中看不到任何会导致CXX标志值重置/更改的内容。
pkg\u search\u模块
实际上应该只设置像
SDL2\u CFLAGS
这样的变量,而不应该触摸
CMAKE\u CXX\u标志
。可能在CMakeLists.txt的早期设置
CMAKE\u CXX\u标志
,然后在放置
variable\u watch(CMAKE\u CXX\u标志)
后立即设置
CMAKE\u CXX\u标志是调试此功能的最佳方法。您可以添加
make VERBOSE=1
的输出吗。我想这个定义没有加上。实际上,-st=c++11不是一个标志,而是编译器的一部分。对于我来说,
set(CMAKE_CXX_FLAGS“${CMAKE_CXX_FLAGS}-std=c++11”)