对 LINK_WHAT_YOU_USE 和 Meson 的对应物感到困惑b_asneeded

Confusion about LINK_WHAT_YOU_USE and Meson's counterpart b_asneeded

提问人:arrowd 提问时间:10/12/2023 最后编辑:arrowd 更新时间:10/13/2023 访问量:46

问:

从我收集到的信息来看,当 Meson 执行 ELF 二进制文件的链接时,它默认通过将标志传递给链接器来修剪不需要的共享库。这个答案说标志使链接器遍历库列表,检查被链接的二进制文件是否真的使用它,如果没有,请将其从列表中删除。--as-needed

现在,CMake 有 CMAKE_LINK_WHAT_YOU_USE 变量,它似乎与 Meson 中的操作相同,尽管与 Meson 不同的是,它在 CMake 中默认为 OFF。但是,深入研究 CMake 内部,发现CMAKE_LINK_WHAT_YOU_USE实际上通过了,无论如何,这是默认行为:b_asneeded--no-as-needed

% grep -r LINK_WHAT_YOU_USE_FLAG /usr/local/share/cmake/
...
Modules/CMakeCXXInformation.cmake:  if(NOT DEFINED CMAKE_CXX_LINK_WHAT_YOU_USE_FLAG)
Modules/CMakeCXXInformation.cmake:    set(CMAKE_CXX_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")

这让我感到困惑。使用时,我将如何删除未使用的库?CMAKE_LINK_WHAT_YOU_USE

C++ CMake 动态链接

评论

0赞 KamilCuk 10/12/2023
它看起来像 github.com/Kitware/CMake/blob/master/Help/prop_tgt/... 此选项用于打印未使用的链接器依赖项,而不是传递链接器选项。为了打印它们,传递以链接所有库,然后在编译时执行以打印使用的库。cmake.org/cmake/help/v3.12/prop_tgt/...... github.com/Kitware/CMake/blob/master/Source/cmcmd.cxx#L415--as-needed--no-as-neededld
0赞 arrowd 10/13/2023
@KamilCuk 您的评论似乎是正确的。所以事实证明,CMake 不是一个类似于 Meson b_asneeded的开箱即用开关?

答: 暂无答案