[pthreads] cmake와 libpthread

나는 중이에요 RHEL 5.1및 사용gcc .

컴파일 및 링크 cmake에 추가 -pthread하도록 하려면 어떻게 합니까?



답변

@Manuel은 거기에있었습니다. 다음과 같이 컴파일러 옵션을 추가 할 수도 있습니다.

CMake 3.1.0 이상을 사용 하면 훨씬 쉬워집니다 .

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(my_app PRIVATE Threads::Threads)

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_LIBS_INIT}")
endif()

이전 CMake 버전에는 다음이 필요할 수 있습니다.

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 3.1 이상에서 처음 두 가지 방법 중 하나를 사용하려면 set(THREADS_PREFER_PTHREAD_FLAG ON)이 방법도 필요합니다 .


답변

다음은 깨끗하고 (사용하여 find_package) 작동 해야합니다 (찾기 모듈은이라고 함 FindThreads).

cmake_minimum_required (VERSION 2.6)
find_package (Threads)
add_executable (myapp main.cpp ...)
target_link_libraries (myapp ${CMAKE_THREAD_LIBS_INIT})


답변

올바른 대답은 다음과 같습니다.

ADD_EXECUTABLE(your_executable ${source_files})

TARGET_LINK_LIBRARIES( your_executable
pthread
)

에 해당

-lpthread


답변