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 ..