c++ pthreads cmake ubuntu-12.10

c++ - ¿Cómo hacer que CMake reconozca pthread en Ubuntu?



pthreads ubuntu-12.10 (1)

Si compilo en la línea de comandos con g ++ directamente, puedo ver todo lo que necesito:

$ g++ -pthread test.cpp $ ldd a.out linux-vdso.so.1 => (0x00007fffd05b3000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4a1ba8d000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4a1b870000) ...more...

Luego trato de crear un archivo cmake simple para esta aplicación de prueba de 5 líneas:

$ cat CMakeLists.txt PROJECT ( Test CXX ) CMAKE_MINIMUM_REQUIRED ( VERSION 2.8 ) FIND_PACKAGE ( Threads REQUIRED ) ADD_EXECUTABLE ( test test.cpp ) TARGET_LINK_LIBRARIES ( test ${CMAKE_THREAD_LIBS_INIT} )

Sin embargo, no puedo entender por qué CMake no encuentra lo que necesita para Threads :

$ cd build/ $ cmake .. CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE): Could NOT find Threads (missing: Threads_FOUND) Call Stack (most recent call first): /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-2.8/Modules/FindThreads.cmake:166 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:4 (FIND_PACKAGE) -- Configuring incomplete, errors occurred!


Oh, esto fue un dolor! Probablemente perdí 2 horas en esto. Aquí está la solución:

CMake usa aplicaciones ''C'' cortas para probar / probar cosas. Si el CMakeLists.txt indica que se usa C ++ para el proyecto, sin también enumerar C, entonces algunas de esas pruebas cortas fallan incorrectamente, y cmake luego piensa que esas cosas no se encontraron.

La solución fue cambiar la primera línea de CMakeLists a partir de esto:

PROJECT ( Test CXX )

... para incluir C como un idioma:

PROJECT ( Test C CXX )

A continuación, elimine la build , recíclela y, a continuación, todo funciona:

rm -rf build mkdir build cd build cmake ..