web-dev-qa-db-fra.com

lien vers la bibliothèque pthread en utilisant CMake (in CLion)

J'ai regardé partout et je ne vois pas comment faire en sorte que CLion relie la bibliothèque lththread. Je sais que w/gcc vous pouvez simplement taper -lpthread, mais je dois effectuer un débogage dans CLion.

Voici mon fichier CMakeLists actuel:

cmake_minimum_required(VERSION 3.3)

project(lab4)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

include_directories(/usr/include/)
link_directories(/usr/include/)

set(SOURCE_FILES lab4_v2.c)
add_executable(lab4 ${SOURCE_FILES})
14
somecbusnerd

Avant CMake 2.8.12:

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 utilisez CMAKE 2.8.12+:

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_LIBES_INIT}")
endif()

si vous avez CMake 3.1.0+

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

Si vous souhaitez utiliser l'une des deux premières méthodes avec CMake 3.1+, vous aurez besoin des éléments suivants:

set(THREADS_PREFER_PTHREAD_FLAG ON)

Informations tirées de vidéo d'Anastasia Kazakova

17
kroiz

vous devriez utiliser target_link_libraries :

target_link_libraries(lab4 pthread)
18
Chris Maes

Pour C:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
9
snr

Réponse à compter de la CLion 2018.2 et de la version 3.14.0 intégrée de cmake

J'ai utilisé d'autres réponses dans ce fil de discussion pour modifier mon CMakeLists.txt, et j'ai finalement trouvé que je devais ajouter une deuxième ligne avec set () pour que cela fonctionne. Mon fichier ressemble à ce qui suit:

cmake_minimum_required(VERSION 3.12)
project(thread_test_project C)

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")

include_directories(.)

add_executable(thread_test
        thread_test.c)
0
copeland3300