web-dev-qa-db-ja.com

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が "include"をどこかで探している場合)

しかし、(キャッシュを削除した後でも)同じエラーが発生します。プロジェクトに「手動で」Pthreadを追加したり、CMakeList.txtでいくつかの定数を定義したりできることは知っていますが、それはCMakeの原則ではないと思います。すべてのシステムで同じ「CMakeList.txt」を使用できますよね?では、CMakeに「Hey!Looks here!Pthread is in thisdirectory!」と伝えるにはどうすればよいですか。たぶんCmakeはPATHではなく別の環境変数を調べますが、この情報は見つかりませんでした。

読んでくれてありがとう。

編集:それが違いを生むかどうかはわかりませんが、私のプロジェクトはC++プロジェクトです(Cではありません)

14
Neozaru

私がしたこと、私はcmakeファイルを編集しました:

option(CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON)

そして

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

(私はグーグルテストを使用しています)

4
radato

私の知る限り、PthreadsはWindowsプラットフォームではネイティブにサポートされていません。あなたが何かのようなものを使用しない限り

NIX用のwinサービス

Windowsにはwin32スレッドしかありません。

ただし、これはWindowsでpthreadを提供するプロジェクトです。

win32のpthreads

1
fkl

どうやらCMAKE_USE_WIN32_THREADS_INITはすべてのプラットフォームのコンテキストで役立ちます。この変数は、findPackage(Threads)の呼び出し時に生成または初期化されます。理想的には、スレッドライブラリを実行可能ファイルとリンクする必要がある場合に、すべてのプラットフォームでリンクの問題を処理します。基本的に、プラットフォームのようなプラットフォームunixで適切なスレッドライブラリ名を生成し、リンクに明示的なスレッドライブラリが必要ないウィンドウなどのプラットフォームでは空です。リファレンス:CMake findThreads https://cmake.org/cmake/help/v3.0/module/FindThreads.html?highlight=threads

1
Saif Mulla