답변:
@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)
이 방법도 필요합니다 .
NOT CMAKE_HAVE_THREADS_LIBRARY
예 : Ubuntu 15.04) : (
/usr/share/cmake-2.8/Modules/FindThreads.cmake
(예 : apt-browse.org/browse/ubuntu/trusty/main/all/cmake-data/… 참조 ). 기본적으로, THREADS_HAVE_PTHREAD_ARG
(. 즉, 플래그의 다른 변화가 발견되지 않은 경우에만 설정 -lpthread
, -lpthread
또는 -lthread
)
다음은 깨끗하고 (사용하여 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
target_link_libraries(target "$<$<CXX_COMPILER_ID:GNU>:-pthread>$<$<CXX_COMPILER_ID:Clang>:-pthreads>")
적어도 대상 기반이며 Windows 및 기타 플랫폼에서 실패 하지 않는 것과 같은 것을 찾으십시오 .