2013-03-04 1 views
31

이있다 :CMake가 우분투에서 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 C CXX) 

그런 다음 build 삭제를 재 작성하고 모든 :

PROJECT (Test CXX) 

이 ... 언어로 C를 포함 :

솔루션이에서 CMakeLists의 첫 번째 줄을 변경했다 그러면 작동합니다 :

+3

'찾기 ...'선언 앞에 'PROJECT ...'선언을 명시해야합니다. ... '실제로 사용됩니다. –