2012-11-04 94 views
8

我是CMake的新手。我在Linux上測試了我正在製作的程序。這個程序使用(POSIX線程LIB),所以在我CMakeList,我說:CMake:在Windows中找不到<pthread.h>

find_package(Threads) 

它適用於Linux的發行商(拱,薄荷,Ubuntu的,...),但現在,我想它WINDOWS32(Visual Studio的9 2008年),我生成過程中得到這個消息:

-- Looking for include file pthread.h - not found 

(當我編譯輸出的項目文件,pthread.h確實沒有找到)。

在Windows上,考慮到 「C:\並行線程」 作爲我的並行線程的目錄,我在路徑定義:

  • 「C:\並行線程\包括」(其中位於著名的 「pthread.h」)
  • 「C:\並行線程\」(在CMake的尋找一個「有」的地方的情況下)

但我仍然得到同樣的錯誤(即使刪除後高速緩存)。我知道我可以在項目中「手動」添加Pthread,或者在CMakeList.txt中定義一些常量,但我認爲這不是CMake的原理:我可以在所有系統上使用相同的「CMakeList.txt」,對吧?所以我怎麼告訴CMake「嘿!看這裏!Pthread在這個目錄!」。 也許Cmake沒有查找PATH,但是在另一個環境變量中,但是我沒有找到這個信息。

謝謝您的閱讀。

編輯:我不知道這是否有差別,但我的項目是一個C++項目(非C)

+0

由於沒有標準在運行cmake-gui時,Windows CMake上include和庫文件的路徑經常需要幫助很長時間。第二個選擇是許多查找器查找環境變量。因此,例如在我的Windows安裝中找到ITK,我在啓動cmake-gui的cmd.exe會話中設置了ITK_DIR。許多軟件包也一樣。還有find_package選項,可以用來幫助控制CMake在哪裏尋找可以提供幫助的軟件包。 – drescherjm

+0

在CMake 2.8.10中查看FindThreads的代碼,它看起來像在Windows上默認使用Windows線程。 – drescherjm

+0

我沒有測試過。查看是否設置了CMAKE_USE_PTHREADS_INIT或者只是CMAKE_USE_WIN32_THREADS_INIT。 – drescherjm

回答

0

據我所知,P線程本身並不支持Windows平臺。除非你使用一些東西一樣

win services for unix

僅適用於Windows有win32的線程。

然而,這是提供在Windows

pthreads on win32

+1

是的,我把它放在「C:\ pthread \」 – Neozaru

+0

錯誤好吧,我以爲你在談論你在這裏複製的linux pthread包。 – fayyazkl

+3

不,我得到了用於win32的pthreads,包含頭文件和預編譯的軟件包。但CMake沒有找到它 – Neozaru

1

顯然,CMAKE_USE_WIN32_THREADS_INIT是在所有平臺範圍內有用的並行線程的項目。該變量在調用findPackage(Threads)時生成或初始化,理想情況下,它在所有平臺上處理鏈接問題,以防線程庫需要與可執行文件鏈接。基本上它會在類似平臺的平臺上生成相應的線程庫名稱,並且在諸如不需要顯式線程庫進行鏈接的Windows平臺上爲空。 參考:CMake的findThreads https://cmake.org/cmake/help/v3.0/module/FindThreads.html?highlight=threads

+0

我檢查了鏈接,但現在呢?你能詳細解釋一下嗎? –

2

我做什麼,我編輯了cmake的文件:

option(CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON) 

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

(我使用谷歌測試)