使用CMake链接到pthread库(在CLion中)

som*_*erd 17 c pthreads cmake

我看了一遍,我无法弄清楚如何让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})
Run Code Online (Sandbox Code Playgroud)

kro*_*oiz 22

在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()
Run Code Online (Sandbox Code Playgroud)

如果您使用的是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()
Run Code Online (Sandbox Code Playgroud)

如果你有CMake 3.1.0+

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(my_app Threads::Threads)
Run Code Online (Sandbox Code Playgroud)

如果您想使用CMake 3.1+的前两种方法之一,您将需要:

set(THREADS_PREFER_PTHREAD_FLAG ON)
Run Code Online (Sandbox Code Playgroud)

信息取自Anastasia Kazakova的视频


Chr*_*aes 20

你应该使用target_link_libraries:

target_link_libraries(lab4 pthread)
Run Code Online (Sandbox Code Playgroud)


snr*_*snr 13

对于C:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
Run Code Online (Sandbox Code Playgroud)