我尝试使用 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
输出:
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
我想念什么?
将 pthread 与主 glibc 合并并删除令人困惑的“未与其链接时未实现的 pthread”行为的事件。
https://developers.redhat.com/articles/2021/12/17/why-glibc-234-removed-libpthread