web-dev-qa-db-ja.com

CMakeを使用したpthreadライブラリへのリンク(CLion内)

私はすべてを見ましたが、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})
16
somecbusnerd

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+で最初の2つの方法のいずれかを使用する場合、以下が必要です。

set(THREADS_PREFER_PTHREAD_FLAG ON)

Anastasia Kazakovaによる videoからの情報

20
kroiz

target_link_libraries を使用する必要があります。

target_link_libraries(lab4 pthread)
19
Chris Maes

Cの場合:

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

CLion 2018.2およびバンドルされている3.12.0のcmakeバージョンの回答

このスレッドで他の回答を使用してCMakeLists.txtを変更しましたが、最終的に、この機能を使用するにはset()でSECOND行を追加する必要がありました。私のファイルは次のようになります。

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)
2
copeland3300