文章目录
CMake 中使用线程库
CMake中,链接线程库可以使用如下方式
set_target_properties(${TARGET} PROPERTIES
COMPILE_FLAGS "-pthread"
LINK_FLAGS "-pthread")
强制为编译和链接增加 -pthread
选项,注意这部分代码不能用
target_link_libraries(${TARGET} pthread)
代替,因为后者会扩展为-lpthread
,并且仅对链接阶段生效,而且只在 Linux 中有效。这样的方法不适合跨平台的使用,并且在目标比较多的时候,添加起来比较麻烦。CMake 中提供了单独的 Threads
库来解决这个问题。可以使用如下方式添加线程库
# 设置并查找线程库,只需要在顶层的 CMakeLists.txt 中添加
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
# 链接线程库
add_library(test ${src})
target_link_libraries(test PUBLIC Threads::Threads)
将目标 test 对线程库 Threads::Threads
的链接属性设置为 PUBLIC ,这样随后如果有目标静态或者动态链接 test 时,都可以隐式地加入对 Threads::Threads
的依赖。但是对于使用 dlopen()
的方式打开动态链接库的目标,则必须手动添加对 Threads::Threads
的依赖。简而言之,就是一次添加,到处使用。