Je suis en train de courir RHEL 5.1
et utiliser gcc
.
Comment je le dis cmake
à ajouter -pthread
à la compilation et à la liaison ?
Je suis en train de courir RHEL 5.1
et utiliser gcc
.
Comment je le dis cmake
à ajouter -pthread
à la compilation et à la liaison ?
@Manuel a fait une partie du chemin. Vous pouvez également ajouter l'option compilateur, comme ceci :
Si vous avez CMake 3.1.0+, cela devient encore plus facile :
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(my_app PRIVATE Threads::Threads)
Si vous utilisez CMake 2.8.12+, vous pouvez simplifier cela :
find_package(Threads REQUIRED)
if(THREADS_HAVE_PTHREAD_ARG)
target_compile_options(my_app PUBLIC "-pthread")
endif()
if(CMAKE_THREAD_LIBS_INIT)
target_link_libraries(my_app "${CMAKE_THREAD_LIBS_INIT}")
endif()
Les anciennes versions de CMake peuvent nécessiter :
find_package(Threads REQUIRED)
if(THREADS_HAVE_PTHREAD_ARG)
set_property(TARGET my_app PROPERTY COMPILE_OPTIONS "-pthread")
set_property(TARGET my_app PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
endif()
if(CMAKE_THREAD_LIBS_INIT)
target_link_libraries(my_app "${CMAKE_THREAD_LIBS_INIT}")
endif()
Si vous voulez utiliser une des deux premières méthodes avec CMake 3.1+, vous aurez besoin de set(THREADS_PREFER_PTHREAD_FLAG ON)
là aussi.
Cela ne fonctionne pas lorsqu'on l'utilise dans un projet CXX uniquement. Quelqu'un connaît-il une solution de contournement ?
Ceci est équivalent. "-pthread" donne beaucoup plus - à la compilation c'est -D_REENTRANT, au moment du lien -lpthread. Sur certains systèmes, il peut même y avoir plus que cela.
J'ai l'impression que cette réponse répond directement à la question. Je suis d'accord pour dire que l'utilisation du module Threads find est plus portable, mais ce n'est pas ce qui a été demandé.
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.
6 votes
Pouvez-vous choisir une réponse à cette question ?
1 votes
Mec, tu dois choisir celle de @Manuel comme réponse.
0 votes
La réponse de @Ehsan thehouse est bien meilleure ! :-)