find_package(Backtrace) 行为异常

find_package(Backtrace) behaves strangely

我正在查看 FindBacktrace module, and unlike with, say, FindThreads 的文档 - 我没有看到我可以依赖的适当库目标的提及,例如Backtrace::Backtrace。它真的丢失了还是只是没有记录?

此外,当我使用这个模块时,我得到:

//Library providing backtrace(3), empty for default set of libraries
Backtrace_LIBRARY:FILEPATH=

在我的 CMakeCache.txt 中(在 Devuan GNU/Linux 机器上)。这很奇怪。我期待看到 -lbacktrace - 因为那是我得到 backtrace_create_statebacktrace_pcinfo 的地方(我需要使用 Boost stacktrace)。

那么,什么是“默认库集”? libbacktrace 当然默认不链接。

如果是 CMake 提供的 Find Modules (e.g. FindBacktrace) provides an imported target, it will almost certainly be documented. You can inspect the source code 的 Find Module 之一,可以肯定。在您的情况下,对于 FindBacktrace.cmake,只需在文件中搜索它可能提供的导入目标的 :: 语法。在撰写本文时,FindBacktrace.cmake 没有提供。

由于许多查找模块早于现代 CMake 的到来,因此实际上 许多 模块尚未提供导入的目标。我想 CMake 维护者正在根据每个模块的需求和受欢迎程度来处理这项任务,因此为 FindBacktrace 模块编写 CMake 问题可能会引发一些行动。

如果受到启发,您也可以编写自己的 modified FindBacktrace.cmake 文件,添加必要的 CMake 代码来定义导入的目标 Backtrace::Backtrace


如果系统(例如libc)提供对backtrace(3)的支持,预计Backtrace_LIBRARY变量将为空。 FindBacktrace 模块将选择可用的默认库,并将其填充到 Backtrace_LIBRARIES.

Backtrace_LIBRARY 缓存路径只有在您的回溯通过其他外部库或包在您的系统上可用时才应使用,例如在非 glibc 系统上。在这种情况下,您将手动填充 Backtrace_LIBRARY

正如@squareskittles 所建议的,这正是 CMake 开发人员应该关注的事情。

我已就此事提交 bug against CMake 并将(希望记得)更新此问题以指示模块何时更新。