CMake 既不向编译器选项添加“-pthread”,也不向链接器添加“-lpthread”

问题描述 投票:0回答:1

我尝试使用 Cmake 和 Ninja 添加编译器标志

-pthread
。我尝试了

中描述的解决方案

但是,如果我调用

ninja -vv
并查看调用的命令,
-pthread
都不会传递到编译阶段,
-lpthread
也不会传递到链接器。

我的

CMakeLists.txt

cmake_minimum_required(VERSION 3.27)

project(milter-alias)

set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
find_package(Threads REQUIRED)

add_executable(
    milter-alias
    src/main.c
)

target_compile_options(milter-alias PRIVATE -Wall -Wextra -pedantic -Werror)
target_compile_features(milter-alias PRIVATE c_std_11)
target_link_libraries(milter-alias PRIVATE milter Threads::Threads)

install(TARGETS milter-alias RUNTIME DESTINATION bin)

ninja -vv
结果

matthias@matthias-pc ~/Entwicklung/milter-alias/build $ ninja -vv
[1/2] /usr/bin/cc   -Wall -Wextra -pedantic -Werror -MD -MT CMakeFiles/milter-alias.dir/src/main.c.o -MF CMakeFiles/milter-alias.dir/src/main.c.o.d -o CMakeFiles/milter-alias.dir/src/main.c.o -c /home/matthias/Entwicklung/milter-alias/src/main.c
[2/2] : && /usr/bin/cc   CMakeFiles/milter-alias.dir/src/main.c.o -o milter-alias  -lmilter && :

我想念什么?我特别想知道为什么单独使用

target_link_libraries( ... Threads::Threads ...)
就足够了。我确实也希望使用
target_compile_options

如果有帮助:

  • CMake 3.27.9
  • 忍者1.11.1
  • 海湾合作委员会13.2.1

附录

根据评论的要求,这是

cmake
输出:

matthias@matthias-pc ~/Entwicklung/milter-alias/build $ cmake -G Ninja ..
-- The C compiler identification is GNU 13.2.1
-- The CXX compiler identification is GNU 13.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Configuring done (0.2s)
-- Generating done (0.0s)
-- Build files have been written to: /home/matthias/Entwicklung/milter-alias/build
cmake pthreads
1个回答
0
投票

我想念什么?

将 pthread 与主 glibc 合并并删除令人困惑的“未与其链接时未实现的 pthread”行为的事件。

https://developers.redhat.com/articles/2021/12/17/why-glibc-234-removed-libpthread

© www.soinside.com 2019 - 2024. All rights reserved.