如何获得CMake的认识在Ubuntu并行线程?(How to get CMake to recog

2019-07-20 21:37发布

如果我编译与克命令行++直接,我可以看到我需要的一切是存在的:

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

Answer 1:

哦,这是是一个痛苦! 我可能失去了对这个2小时。 这里是解决方案:

CMake的使用短“C”的应用程序来测试/尝试的事情。 如果的CMakeLists.txt指出,C ++,用于该项目,还没有上市的C,那么其中的一些短裤测试错误地失败,然后cmake的认为这些东西都没有发现。

解决的办法是改变从这个CMakeLists的第一行:

PROJECT ( Test CXX )

...包括C作为一门语言:

PROJECT ( Test C CXX )

然后删除build ,重新创建它,然后一切正常:

rm -rf build
mkdir build
cd build
cmake ..


文章来源: How to get CMake to recognize pthread on Ubuntu?