cmake y libpthread

Estoy ejecutando RHEL 5.1 y uso gcc .

¿Cómo le digo a cmake que agregue -pthread a comstackción y enlaces?

Lo siguiente debe estar limpio (usando find_package ) y trabajar (el módulo de búsqueda se llama FindThreads ):

 cmake_minimum_required (VERSION 2.6) find_package (Threads) add_executable (myapp main.cpp ...) target_link_libraries (myapp ${CMAKE_THREAD_LIBS_INIT}) 

@ Manuel estuvo a mitad de camino allí. Puede agregar la opción del comstackdor también, así:

Si tiene CMake 3.1.0+, esto se vuelve aún más fácil :

 set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) target_link_libraries(my_app Threads::Threads) 

Si está utilizando CMake 2.8.12+, puede simplificar esto para:

 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() 

Las versiones anteriores de CMake pueden requerir:

 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 desea utilizar uno de los primeros dos métodos con CMake 3.1+, necesitará set(THREADS_PREFER_PTHREAD_FLAG ON) allí también.

Aquí está el artículo correcto:

 ADD_EXECUTABLE(your_executable ${source_files}) TARGET_LINK_LIBRARIES( your_executable pthread ) 

equivalente a

 -lpthread