Tom*_*lny 37 build-automation gcc build cmake
我知道有类似的东西,find_package(Threads)但它似乎没有什么区别(至少本身).现在我正在使用SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-pthread"),但它对我来说看起来不是一个正确的解决方案.
ltc*_*ltc 51
find_package( Threads )调用CMake模块,首先在文件系统中搜索该平台的相应线程包,然后设置CMAKE_THREAD_LIBS_INIT变量(以及其他一些变量).它没有告诉CMake将任何可执行文件链接到它找到的任何线程库.您告诉CMake使用该target_link_libraries()命令将可执行文件与"Threads"库链接.所以,例如,假设您的程序称为测试.要将它与您需要的线程相关联:
find_package( Threads )
add_executable( test test.cpp )
target_link_libraries( test ${CMAKE_THREAD_LIBS_INIT} )
Run Code Online (Sandbox Code Playgroud)
Ale*_*Che 49
CMake的最新版本(> = 3.1)中的Threads模块生成Threads :: Threads导入的目标.将目标链接到Threads :: Threads会添加所有必要的编译和链接标志.它可以这样做:
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
find_package(Threads REQUIRED)
add_executable(test test.cpp)
target_link_libraries(test Threads::Threads)
Run Code Online (Sandbox Code Playgroud)
根据CMake文档,强烈建议在新代码中使用导入的目标
小智 7
以下内容如何:
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads REQUIRED)
if(CMAKE_USE_PTHREADS_INIT)
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-pthread")
elseif(...)
...
endif()
add_executable( test test.cpp )
target_link_libraries( test ${CMAKE_THREAD_LIBS_INIT} )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43349 次 |
| 最近记录: |