2012-08-15 11 views
8

OS X 1,8CMAKE, Clang y C++ v11 en OS X 10.8

CMAKE 2.8.9

Clang $ clang -v Apple clang version 4.0 (tags/Apple/clang-421.10.60) (based on LLVM 3.1svn) Target: x86_64-apple-darwin12.0.0 Thread model: posix

CMakeLists.txt:

cmake_minimum_required (VERSION 2.8.9) 
project (Test) 
add_executable(Test main.cpp) 

main.cpp

//Create a C++11 thread from the main program 
#include <iostream> 
#include <thread> 

//This function will be called from a thread 
void call_from_thread() { 
    std::cout << "Hello, World!" << std::endl; 
} 

int main() { 
    //Launch a thread 
    std::thread t1(call_from_thread); 

    //Join the thread with the main thread 
    t1.join(); 

    return 0; 
} 

Mi error:

$ make 
Scanning dependencies of target Test 
[100%] Building CXX object CMakeFiles/Test.dir/main.cpp.o 
test/main.cpp:4:10: fatal error: 'thread' file not found 
#include <thread> 
    ^
1 error generated. 
make[2]: *** [CMakeFiles/Test.dir/main.cpp.o] Error 1 
make[1]: *** [CMakeFiles/Test.dir/all] Error 2 
make: *** [all] Error 2 

también lo hace la versión de Sonido metálico no admita las funciones C++ V11? Este mismo programa se compila bajo gcc-4.7.1 en OSX 10.8

Esta referencia dice que debería funcionar http://www.cpprocks.com/a-comparison-of-c11-language-support-in-vs2012-g-4-7-and-clang-3-1/

¿Qué estoy haciendo mal?

+1

Agregue '-std = C++ 11 -stdlib = libC++ 'a los indicadores del compilador? –

Respuesta

23

Debe proporcionar los indicadores -std=c++11 y -stdlib=libc++ al compilador para activar completamente su compatibilidad con C++ 11. Esto se puede hacer a través ccmake (activar el modo avanzado (con t), y estableció CMAKE_CXX_FLAGS a -std=c++11 -stdlib=libc++), oa través de una directiva equivalente en su CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.9) 
set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++") 
project(Test) 
add_executable(Test main.cpp) 
+0

Gracias: 'set (CMAKE_CXX_FLAGS" -std = C++ 11 -stdlib = libC++ ") ' – Jason

+1

Eso todavía no funciona. Las opciones se pasan al compilador, "make VERBOSE = 1" verificó eso, pero las clases de C++ 11 como std :: thread o std :: function están indefinidas, a pesar de que y están incluidos. – Michael

+0

@Michael ¿Encontró una solución? – aledalgrande

Cuestiones relacionadas