나는 중이에요 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