CMake和的libpthread(cmake and libpthread)

2019-09-01 03:13发布

我运行RHEL 5.1和使用gcc

我该如何告诉cmake增加-pthread来编译和连接?

Answer 1:

下面列出的是干净的(使用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})


Answer 2:

@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)也有。



Answer 3:

这是正确的anwser:

ADD_EXECUTABLE(your_executable ${source_files})

TARGET_LINK_LIBRARIES( your_executable
pthread
)

相当于

-lpthread


文章来源: cmake and libpthread