Comment obtenir CMake à reconnaître pthread sur Ubuntu?
Si je compile sur la ligne de commande avec g++ directement, je peux voir tout ce que je besoin est là:
$ 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...
Ensuite, j'essaie de créer un simple fichier cmake pour ce 5 de test en ligne de l'app:
$ 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} )
Cependant, je ne peux pas comprendre pourquoi CMake ne trouve pas ce qu'il doit utiliser pour 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!
Vous devez vous connecter pour publier un commentaire.
Oh, c'était une douleur! J'ai probablement perdu plus de 2 heures sur ce. Voici la solution:
CMake utilise court " C " des applications à tester/essayer des choses. Si l'CMakeLists.txt les états que le C++ est utilisé pour le projet, sans inscription C, puis certains de ces courts-métrages tests incorrecte de l'échec, et cmake puis pense à ces choses qui ne sont pas disponibles.
La solution a été de changer la première ligne de CMakeLists de:
...à inclure C en tant que langue:
Puis supprimer
build
, le recréer, et tout fonctionne:PROJECT ...
déclaration doit être déclaré avant leFind ...
est réellement utilisée.