Ссылка на библиотеку pthread, используя CMake (в CLion)

Я просмотрел все, и я не могу понять, как заставить CLion связать библиотеку lpthread. Я знаю, что w/gcc вы можете просто набрать -lpthread, но мне нужно выполнить некоторую отладку в CLion.

Здесь мой текущий файл CMakeLists:

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

Ответ 1

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

Если у вас 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()

Если у вас CMake 3.1. 0+

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

Если вы хотите использовать один из первых двух методов в CMake 3. 1+, вам потребуется:

set(THREADS_PREFER_PTHREAD_FLAG ON)

Информация взята из видео Анастасии Казаковой

Ответ 2

вы должны использовать target_link_libraries:

target_link_libraries(lab4 pthread)

Ответ 3

Для C:

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

Ответ 4

Ответ от CLion 2018.2 и в комплекте cmake версии 3.12.0

Я использовал другие ответы в этой теме, чтобы изменить свой CMakeLists.txt, и в конечном итоге обнаружил, что мне нужно было добавить ВТОРОЙ строку с set(), чтобы это работало. Мой файл выглядит следующим образом:

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)