2013-10-02 58 views
4

我在使用CMake编译C++ 11/SDL 2.0代码时遇到了一些麻烦。该CMakeLists很简单:CMake with SDL 2.0 and C++ 11

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和4.7.2的gcc。有关如何正确使用CMake的C++ 11功能的任何想法?

PS:我也曾尝试-std = C++ 11

+0

您可以添加'make VERBOSE = 1'的输出。我想这个定义不会被添加。 实际上,-st = C++ 11不是标志,而是编译器的一部分。对我来说'set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -std = C++ 11”)'起作用。 – usr1234567

回答

3

add_definitions是真的设置预处理器定义。您需要在此处设置CMAKE_CXX_FLAGS

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
+0

仍然无法正常工作。 :( –

+1

我的“正常”生成文件工作得很好:http://pastebin.com/LEFEXYaZ –

+0

你删除了'add_definitions'调用我认为?你可以运行'make VERBOSE = 1'并粘贴输出吗? – Fraser