Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CMake链接到pthread库(在CLion中)_C_Cmake_Pthreads - Fatal编程技术网

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

使用CMake链接到pthread库(在CLion中),c,cmake,pthreads,C,Cmake,Pthreads,我找遍了所有地方,但我不知道如何让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_directori

我找遍了所有地方,但我不知道如何让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})
在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)
信息取自

您应该使用:

对于C:


从CLion 2018.2和捆绑版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)
< C++ > 使用


这是关于CMake,而不是关于MaFixFor或CYONE…@ SoeCubndRD:如果我的答案帮助了你,考虑接受它。注意:也可能需要指定<代码> FundPosik(需要的线程)之前(源代码:):只有这个对我起作用,而不是上面提到的那些。有人能解释一下吗。
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
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)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -pthread" )