Sté*_*ane 32 c++ pthreads cmake ubuntu-12.10
如果我直接使用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...
Run Code Online (Sandbox Code Playgroud)
然后我尝试为这个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} )
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚为什么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!
Run Code Online (Sandbox Code Playgroud)
Sté*_*ane 53
哦,这真是太痛苦了!我可能在这上面失去了2个小时.这是解决方案:
CMake使用简短的'C'应用程序来测试/尝试.如果CMakeLists.txt声明C++用于项目,而没有列出C,那么其中一些短路测试错误地失败,然后cmake认为找不到那些东西.
解决方案是改变第一行CMakeLists:
PROJECT ( Test CXX )
Run Code Online (Sandbox Code Playgroud)
...包括C作为语言:
PROJECT ( Test C CXX )
Run Code Online (Sandbox Code Playgroud)
然后删除build
,重新创建它,然后一切工作:
rm -rf build
mkdir build
cd build
cmake ..
Run Code Online (Sandbox Code Playgroud)