Ответ 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)
Я новичок в 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, я определил в пути:
Но я все равно получаю ту же ошибку (даже после удаленного кеша). Я знаю, что могу "вручную" добавить Pthread в свой проект или определить некоторые константы в CMakeList.txt, но я думаю, что это не принцип CMake: я мог бы использовать SAME "CMakeList.txt" для всех систем, верно? Итак, как я могу сказать CMake: "Эй, смотрим здесь! Pthread в этом каталоге!". Возможно, Cmake не выглядит в PATH, но в другой переменной окружения, но я не нашел эту информацию.
Спасибо, что прочитали.
EDIT: я не знаю, имеет ли значение значение, но мой проект - это проект С++ (не C)
Что я сделал, я редактировал файл cmake:
option(CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON)
и
option(gtest_disable_pthreads "Disable uses of pthreads in gtest." ON)
(Я использую google test)
Насколько я знаю, Pthreads не поддерживается на платформе Windows. Если вы не используете что-то вроде
В Windows только есть потоки win32.
Однако это проект, который предоставляет pthreads для windows
По-видимому, CMAKE_USE_WIN32_THREADS_INIT полезен в контексте всех платформ. Эта переменная генерируется или инициализируется при вызове findPackage (Threads), в идеале он обрабатывает проблемы со связью на всех платформах, если библиотека потоков требуется связать с исполняемым файлом. В основном он генерирует соответствующее имя библиотеки потоков на платформах unix, подобных платформам, и пуст на платформе, например, в тех случаях, когда для связывания не требуется явная библиотека потоков. Ссылка: CMake findThreads https://cmake.org/cmake/help/v3.0/module/FindThreads.html?highlight=threads
это более универсальная переменная CMAKE_THREAD_LIBS_INIT, которая подходит для кроссплатформенной сборки, однако, если вы ищете конкретные окна и не беспокоитесь о них, используйте CMAKE_USE_WIN32_THREADS_INIT, вот документация
У меня была такая же проблема, я просто удалил кеш и настроил его, затем для дополнительной платформы для генератора я выбрал x64 и не было ошибки