link 使用 CMake 到 pthread 库(在 CLion 中)
link to pthread library using CMake (in CLion)
我查看了所有内容,但无法弄清楚如何将 CLion 引入 link 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 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)
你应该使用 target_link_libraries:
target_link_libraries(lab4 pthread)
对于 C:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
截至 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)
对于 C++
使用
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -pthread" )
我查看了所有内容,但无法弄清楚如何将 CLion 引入 link 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 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)
你应该使用 target_link_libraries:
target_link_libraries(lab4 pthread)
对于 C:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
截至 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)
对于 C++ 使用
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -pthread" )