私は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の原則ではないと思います。すべてのシステムで同じ「CMakeList.txt」を使用できますよね?では、CMakeに「Hey!Looks here!Pthread is in thisdirectory!」と伝えるにはどうすればよいですか。たぶんCmakeはPATHではなく別の環境変数を調べますが、この情報は見つかりませんでした。
読んでくれてありがとう。
編集:それが違いを生むかどうかはわかりませんが、私のプロジェクトは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プラットフォームではネイティブにサポートされていません。あなたが何かのようなものを使用しない限り
Windowsにはwin32スレッドしかありません。
ただし、これはWindowsでpthreadを提供するプロジェクトです。
どうやらCMAKE_USE_WIN32_THREADS_INITはすべてのプラットフォームのコンテキストで役立ちます。この変数は、findPackage(Threads)の呼び出し時に生成または初期化されます。理想的には、スレッドライブラリを実行可能ファイルとリンクする必要がある場合に、すべてのプラットフォームでリンクの問題を処理します。基本的に、プラットフォームのようなプラットフォームunixで適切なスレッドライブラリ名を生成し、リンクに明示的なスレッドライブラリが必要ないウィンドウなどのプラットフォームでは空です。リファレンス:CMake findThreads https://cmake.org/cmake/help/v3.0/module/FindThreads.html?highlight=threads