15

我是 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 目录,我在 path 中定义:

  • “C:\pthread\include”(著名的“pthread.h”所在的位置)
  • “C:\pthread\”(在 CMake 在某处寻找“包含”的情况下)

但我仍然得到同样的错误(即使在删除缓存之后)。我知道我可以在我的项目中“手动”添加 Pthread,或者在 CMakeList.txt 中定义一些常量,但我认为这不是 CMake 的原则:我可以在所有系统上使用相同的“CMakeList.txt”,对吗?那么我怎么能告诉 CMake “嘿!看起来在这里!Pthread 在这个目录中!”。也许Cmake没有在PATH中查找,而是在另一个环境变量中查找,但我没有找到此信息。

感谢您的阅读。

编辑:我不知道它是否有所作为,但我的项目是 C++ 项目(不是 C)

4

3 回答 3

5

我做了什么,我编辑了 cmake 文件:

option(CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON)

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

(我正在使用谷歌测试)

于 2017-04-05T15:17:44.667 回答
2

As far as i know, Pthreads is not natively supported on windows platform. Unless you use some thing like

win services for unix

Windows only has win32 threads.

However, this is a project which provides pthreads on windows

pthreads on win32

于 2012-11-04T12:51:30.930 回答
1

显然CMAKE_USE_WIN32_THREADS_INIT在所有平台的上下文中都很有用。该变量是在调用 findPackage(Threads) 时生成或初始化的,理想情况下,它可以处理所有平台上的链接问题,以防线程库需要与可执行文件链接。基本上,它在平台 unix 等平台上生成适当的线程库名称,并且在不需要显式线程库进行链接的窗口等平台上为空。参考:CMake findThreads https://cmake.org/cmake/help/v3.0/module/FindThreads.html?highlight=threads

于 2015-12-19T12:33:59.827 回答