CMake:在Windows中找不到<pthread.h>

我是CMake的新手。 我在Linux上testing了一个我正在编写的程序。 这个程序使用(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确实没有find)。

在Windows上,考虑到“C:\ pthread”作为我的pthread目录,我在path中定义:

  • “C:\ pthread \ include”(其中驻留着名的“pthread.h”)
  • “C:\ pthread \”(在CMake在某处查找“包含”的情况下)

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

感谢您的阅读。

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

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

 option(CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON) 

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

(我正在使用谷歌测试)

据我所知,Pthreads不是本地支持的Windows平台。 除非你用一些东西

赢得unix服务

Windows只有win32线程。

但是,这是一个在Windows上提供pthreads的项目

pthreads在win32上

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