FindBacktrace

查找 backtrace(3),这是一个提供应用程序自调试功能的库。

此模块检查是否支持 backtrace(3),无论是通过标准 C 库 (libc) 还是通过单独的库。

导入的目标

3.30 版本新增。

此模块提供以下 导入目标

Backtrace::Backtrace

一个封装 Backtrace 使用要求的接口库。此目标仅在找到 Backtrace 时可用。

结果变量

此模块定义了以下变量

Backtrace_INCLUDE_DIRS

使用 backtrace(3) 头文件所需的包含目录。

Backtrace_LIBRARIES

使用 backtrace(3) 所需的库(链接器标志),如果有的话。

Backtrace_FOUND

布尔值,指示是否支持 backtrace(3)

缓存变量

以下缓存变量也可用于设置或使用

Backtrace_HEADER

backtrace(3) 所需的头文件。此变量允许在项目代码中动态使用头文件。它也可以由用户覆盖。

Backtrace_LIBRARY

提供回溯的外部库,如果有的话。

Backtrace_INCLUDE_DIR

包含 backtrace(3) 头文件的目录。

示例

从 CMake 3.30 开始查找 Backtrace 并将其链接到项目目标

CMakeLists.txt
find_package(Backtrace)
target_link_libraries(app PRIVATE Backtrace::Backtrace)

Backtrace_HEADER 变量可以用于,例如,由 configure_file() 创建的配置头文件中

CMakeLists.txt
add_library(app app.c)

find_package(Backtrace)
target_link_libraries(app PRIVATE Backtrace::Backtrace)

configure_file(config.h.in config.h)
config.h.in
#cmakedefine01 Backtrace_FOUND
#if Backtrace_FOUND
#  include <@Backtrace_HEADER@>
#endif
app.c
#include "config.h"

如果项目需要支持 CMake 3.29 或更早版本,可以手动定义导入目标

CMakeLists.txt
find_package(Backtrace)
if(Backtrace_FOUND AND NOT TARGET Backtrace::Backtrace)
  add_library(Backtrace::Backtrace INTERFACE IMPORTED)
  set_target_properties(
    Backtrace::Backtrace
    PROPERTIES
      INTERFACE_LINK_LIBRARIES "${Backtrace_LIBRARIES}"
      INTERFACE_INCLUDE_DIRECTORIES "${Backtrace_INCLUDE_DIRS}"
  )
endif()
target_link_libraries(app PRIVATE Backtrace::Backtrace)