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

23

我在各个地方查找了,但是我无法弄清楚如何让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的... - Chris Maes
5个回答

33

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

信息取自Anastasia Kazakova的视频


25

对于 C 语言:

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

21

@somecbusnerd:如果我的回答对您有帮助,请考虑接受它。 - Chris Maes
注意:在此之前可能还需要指定 find_package(Threads REQUIRED)(来源:http://stackoverflow.com/a/40102044/997940) - Yoav Feuerstein

4

对于C++,使用:

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

1
只有这个对我有效,上面提到的那些都不行。 - Boba0514
与之前的相同。 有人能解释一下吗? - raiserle

3

截至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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接