CMake: <pthread.h> не найден в Windows

Я новичок в CMake. Я тестировал его на Linux для программы, которую я делаю. Эта программа использует (POSIX Threads lib), поэтому в моем CMakeList я добавил:

find_package(Threads)

Он работает с дистрибутивами Linux (Arch, Mint, Ubuntu,...), но теперь я пытаюсь использовать его в Windows32 (Visual Studio 9 2008), и я получаю это сообщение во время генерации:

-- Looking for include file pthread.h - not found

(и когда я компилирую выходной файл проекта, pthread.h действительно не найден).

В Windows, рассматривая "C:\pthread" как мой каталог pthread, я определил в пути:

  • "C:\pthread\include" (где находится знаменитый "pthread.h" )
  • "C:\pthread \" (в случае, когда CMake ищет "включить" где-нибудь)

Но я все равно получаю ту же ошибку (даже после удаленного кеша). Я знаю, что могу "вручную" добавить Pthread в свой проект или определить некоторые константы в CMakeList.txt, но я думаю, что это не принцип CMake: я мог бы использовать SAME "CMakeList.txt" для всех систем, верно? Итак, как я могу сказать CMake: "Эй, смотрим здесь! Pthread в этом каталоге!". Возможно, Cmake не выглядит в PATH, но в другой переменной окружения, но я не нашел эту информацию.

Спасибо, что прочитали.

EDIT: я не знаю, имеет ли значение значение, но мой проект - это проект С++ (не C)

Ответ 1

Что я сделал, я редактировал файл cmake:

option(CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON)

и

option(gtest_disable_pthreads "Disable uses of pthreads in gtest." ON)

(Я использую google test)

Ответ 2

Насколько я знаю, Pthreads не поддерживается на платформе Windows. Если вы не используете что-то вроде

win services для unix

В Windows только есть потоки win32.

Однако это проект, который предоставляет pthreads для windows

pthreads на win32

Ответ 3

По-видимому, CMAKE_USE_WIN32_THREADS_INIT полезен в контексте всех платформ. Эта переменная генерируется или инициализируется при вызове findPackage (Threads), в идеале он обрабатывает проблемы со связью на всех платформах, если библиотека потоков требуется связать с исполняемым файлом. В основном он генерирует соответствующее имя библиотеки потоков на платформах unix, подобных платформам, и пуст на платформе, например, в тех случаях, когда для связывания не требуется явная библиотека потоков. Ссылка: CMake findThreads https://cmake.org/cmake/help/v3.0/module/FindThreads.html?highlight=threads

Ответ 4

это более универсальная переменная CMAKE_THREAD_LIBS_INIT, которая подходит для кроссплатформенной сборки, однако, если вы ищете конкретные окна и не беспокоитесь о них, используйте CMAKE_USE_WIN32_THREADS_INIT, вот документация

Ответ 5

У меня была такая же проблема, я просто удалил кеш и настроил его, затем для дополнительной платформы для генератора я выбрал x64 и не было ошибки