2013-03-04 6 views
31

vardır:CMake Ubuntu'da pthread'i tanımak için nasıl kullanılır? Ben doğrudan, ben gereken her şeyi görebilirsiniz ++ g ile komut satırında derlemek

:

$ 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... 

Sonra bu 5 hat testi uygulaması için basit bir cmake dosyası oluşturmak için deneyin

$ 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}) 

Ancak, ben CKağıt o Threads için kullanılacak gerekenleri bulamazsa nedenini anlamaya olamaz:

$ 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! 

cevap

47

Oh, bu bir ağrı oldu! Muhtemelen bu konuda 2 saat kaybettim. İşte çözüm: şeyleri test etmek/denemek için kısa 'C' uygulamaları kullanır. CMake, kısa bir 'C' uygulaması kullanır. CMakeLists.txt, C++ 'nin proje için de kullanılmadığını belirtirse, bu şort testlerinden bazıları hatalı olarak başarısız olur ve daha sonra bu şeylerin bulunmadığını düşünür. ,

PROJECT (Test C CXX) 

Sonra build silmek onu yeniden ve her şey:

PROJECT (Test CXX) 

... Bir dil olarak C içerecek şekilde:

çözüm bundan CMakeLists ilk satırını değiştirmek oldu daha sonra çalışır:

rm -rf build 
mkdir build 
cd build 
cmake .. 
+3

"PROJECT ..." bildiriminin "Bul" ifadesinden önce belirtilmesi gerekir. ... 'aslında kullanılır. –

İlgili konular