我运行RHEL 5.1
和使用gcc
。
我该如何告诉cmake
增加-pthread
来编译和连接?
我运行RHEL 5.1
和使用gcc
。
我该如何告诉cmake
增加-pthread
来编译和连接?
下面列出的是干净的(使用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})
@Manuel是有一部分的方式。 您可以添加编译器选项为好,就像这样:
如果你有CMake的3.1.0+, 这就变得更容易 :
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(my_app 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)
也有。
这是正确的anwser:
ADD_EXECUTABLE(your_executable ${source_files})
TARGET_LINK_LIBRARIES( your_executable
pthread
)
相当于
-lpthread