【问题标题】:link to pthread library using CMake (in CLion)使用 CMake 链接到 pthread 库(在 CLion 中)
【发布时间】:2015-11-30 05:25:16
【问题描述】:

我已经看遍了,我不知道如何让 CLion 链接 lpthread 库。我知道使用 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})

【问题讨论】:

  • 这是关于 CMake,而不是关于 makefile 或 CLion...

标签: c cmake pthreads


【解决方案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)

信息取自video by Anastasia Kazakova

【讨论】:

    【解决方案2】:

    对于 C:

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

    【讨论】:

      【解决方案3】:

      你应该使用target_link_libraries:

      target_link_libraries(lab4 pthread)
      

      【讨论】:

      • @somecbusnerd :如果我的回答对您有帮助,请考虑接受。
      • 注意:可能还需要在此之前指定find_package( Threads REQUIRED )(来源:stackoverflow.com/a/40102044/997940
      【解决方案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)
      

      【讨论】:

        【解决方案5】:

        对于 C++ 使用

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

        【讨论】:

        • 只有这个对我有用,不是上面提到的那些
        • 同上一个。有人可以解释一下吗?
        猜你喜欢
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 2019-09-05
        • 2018-10-25
        • 2020-06-17
        • 2021-11-12
        相关资源
        最近更新 更多