CMake FindThreads 与现代 C++ 的正确使用是什么?

Ric*_*nry 5 cmake c++11

CMake 的源代码 ( https://github.com/Kitware/CMake/blob/master/Modules/FindThreads.cmake ) 声明了以下关于“FindThreads”功能的信息:

如果使用std::thread标准库完成线程处理,则 C++11 及更高版本不需要此模块 。

但是如果我遵循这个建议(在我的 Mint18 x86_64 系统、gcc8、CMake 3.13.2 上)我得到:

/usr/bin/ld: CMakeFiles/prism-esm-dummy.dir/src/main.cpp.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

如果该模块被执行(我可以使用其他 SO 文章和之前给出的建议来尽可能地计算):

set (THREADS_PREFER_PTHREAD_FLAG ON)
find_package (Threads REQUIRED)

add_executable(my_app main.cpp)
target_link_libraries (my_app Threads::Threads)
Run Code Online (Sandbox Code Playgroud)

... 结果是一样的。

THREADS_FOUNDistrueCMAKE_USE_PTHREADS_INITis 1,但我没有-pthread编译,或-lpthread链接期间。我检查了模块中提到的一些其他变量,我尝试的所有变量都没有设置。

有没有正确的方法来做到这一点?或者我应该只使用正常的标志并继续我的生活?

小智 6

find_package( Threads )
target_link_libraries( ${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT} )
Run Code Online (Sandbox Code Playgroud)

另请参阅/sf/answers/378182591/