简体   繁体   English

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

[英]link to pthread library using CMake (in CLion)

I've looked all over and I can't figure out how to get CLion to link the lpthread library.我已经看遍了,我无法弄清楚如何让 CLion 链接 lpthread 库。 I know that w/ gcc you can just type -lpthread, but I need to do some debugging in CLion.我知道 w/gcc 你可以只输入 -lpthread,但我需要在 CLion 中进行一些调试。

Here's my current CMakeLists file:这是我当前的 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})

Before CMake 2.8.12:在 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()

If you have CMAKE 2.8.12+:如果您有 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()

If you have CMake 3.1.0+如果你有 CMake 3.1.0+

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

If you want to use one of the first two methods with CMake 3.1+, you will need:如果要在 CMake 3.1+ 中使用前两种方法之一,则需要:

set(THREADS_PREFER_PTHREAD_FLAG ON)

Info taken from video by Anastasia Kazakova信息取自Anastasia Kazakova 的视频

对于 C:

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

你应该使用target_link_libraries

target_link_libraries(lab4 pthread)

Answer as of CLion 2018.2 and the bundled cmake version of 3.12.0从 CLion 2018.2 和 3.12.0 的捆绑 cmake 版本开始回答

I used other answers in this thread to modify my CMakeLists.txt, and ultimately found I had to add a SECOND line with set() to make this work.我在这个线程中使用了其他答案来修改我的 CMakeLists.txt,最终发现我必须用 set() 添加第二行才能完成这项工作。 My file looks like the following:我的文件如下所示:

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)

对于 C++ 使用

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM