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

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

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

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

4

3 に答える 3

2

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

unix の win サービス

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

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

win32 の pthreads

于 2012-11-04T12:51:30.930 に答える
1

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

于 2015-12-19T12:33:59.827 に答える