59 votes

Comment forcer cmake à inclure l'option "-pthread" lors de la compilation ?

Je sais qu'il y a quelque chose comme find_package(Threads) mais cela ne semble pas faire de différence (du moins en soi). Pour l'instant, j'utilise SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-pthread") , mais cela ne me semble pas être une solution correcte.

99voto

Alex Che Points 822

Le module Threads dans les dernières versions (>= 3.1) de CMake génère la cible importée Threads::Threads . Lier votre cible à Threads::Threads ajoute tous les indicateurs de compilation et de liaison nécessaires. Cela peut être fait comme ceci :

 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
find_package(Threads REQUIRED)

add_executable(test test.cpp)
target_link_libraries(test Threads::Threads)

L'utilisation de la cible importée est fortement recommandée pour le nouveau code, selon la documentation CMake

9voto

user3701085 Points 97

Qu'en est-il des éléments suivants :

 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads REQUIRED)
if(CMAKE_USE_PTHREADS_INIT)
    set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-pthread")
elseif(...)
    ...
endif()
add_executable( test test.cpp )
target_link_libraries( test ${CMAKE_THREAD_LIBS_INIT} )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X