2013-03-04 4 views
31

があります:CMakeにUbuntuでpthreadを認識させるには?私が直接、私は必要なすべてを見ることができるG ++を使用してコマンドラインでコンパイルする場合

$ g++ -pthread test.cpp 
$ ldd a.out 
    linux-vdso.so.1 => (0x00007fffd05b3000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4a1ba8d000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4a1b870000) 
    ...more... 

は、その後、私はこの5行のテストアプリケーションのための単純なcmakeのファイルを作成しよう

$ cat CMakeLists.txt 
PROJECT (Test CXX) 
CMAKE_MINIMUM_REQUIRED (VERSION 2.8) 
FIND_PACKAGE (Threads REQUIRED) 
ADD_EXECUTABLE (test test.cpp) 
TARGET_LINK_LIBRARIES (test ${CMAKE_THREAD_LIBS_INIT}) 

cmakeのは、それがThreadsのために使用する必要があるものを見つけることができない理由しかし、私は把握することはできません。

$ cd build/ 
$ cmake .. 
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE): 
    Could NOT find Threads (missing: Threads_FOUND) 
Call Stack (most recent call first): 
    /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE) 
    /usr/share/cmake-2.8/Modules/FindThreads.cmake:166 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) 
    CMakeLists.txt:4 (FIND_PACKAGE) 
-- Configuring incomplete, errors occurred! 

答えて

47

ああ、これは苦痛でした!私はおそらくこれで2時間を失ったでしょう。これは解決策です:

CMakeは物事をテストしたり試したりするために短い「C」アプリケーションを使用します。 CMakeLists.txtが、プロジェクトにC++が使用されていて、Cも表示されていないと述べた場合、それらのショートテストのいくつかは間違って失敗し、cmakeはそれらのものが見つからないと考えます。

PROJECT (Test CXX) 

...言語としてCを含める:ソリューションはここからCMakeListsの最初の行を変更することでした

PROJECT (Test C CXX) 

その後buildを削除し、それを再作成し、すべてのもの次に動作します:

+3

'PROJECT ...'宣言は 'Find ... 'が実際に使用されます。 –

関連する問題