Как заставить CMake распознавать pthread в Ubuntu?

Если я скомпилирую в командной строке напрямую с помощью g ++, я смогу увидеть все, что мне нужно:

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

Затем я пытаюсь создать простой файл cmake для этого 5-строчного тестового приложения:

$ 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} )

Тем не менее, я не могу понять, почему CMake не находит то, что ему нужно использовать для 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!

31

Решение

О, это была боль! Я вероятно потерял 2 часа на этом. Вот решение:

CMake использует короткие C-приложения для тестирования / тестирования. Если CMakeLists.txt заявляет, что C ++ используется для проекта, без указания C, то некоторые из этих коротких тестов ошибочно завершаются, и cmake считает, что эти вещи не найдены.

Решение состояло в том, чтобы изменить первую строку CMakeLists из этого:

PROJECT ( Test CXX )

…включить C в качестве языка:

PROJECT ( Test C CXX )

Затем удали build, воссоздай его, и тогда все будет работать:

rm -rf build
mkdir build
cd build
cmake ..
50

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]