Источник для CMake (https://github.com/Kitware/CMake/blob/master/Modules/FindThreads.cmake) заявляет следующее о функциональности "FindThreads":
Этот модуль не нужен для C ++ 11 и более поздних версий, если многопоточность выполняется с использованием
std::thread
из стандартной библиотеки.
Но если я последую этому совету (в моей системе 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
Если модуль используется (насколько я мог понять, используя другие статьи SO и ранее предоставленный совет):
set (THREADS_PREFER_PTHREAD_FLAG ON)
find_package (Threads REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries (my_app Threads::Threads)
... результат тот же.
THREADS_FOUND
это true
и CMAKE_USE_PTHREADS_INIT
это 1
, но я не получаю -pthread
при компиляции или -lpthread
при ссылке. Я проверил ряд других переменных, упомянутых в модуле, и все, что я пытался, не были установлены.
Есть ли правильный способ сделать это? Или я должен просто использовать обычные флаги и продолжать жить?