FindBacktrace

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

find_package(Backtrace [...])

此模块检查是支持 backtrace(3),是通过标准 C 库(libc)还是通过独立库。

导入的目标

此模块提供以下 导入目标

Backtrace::Backtrace

3.30 版本新增。

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

结果变量

此模块定义了以下变量

Backtrace_FOUND

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

Backtrace_INCLUDE_DIRS

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

Backtrace_LIBRARIES

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

缓存变量

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

Backtrace_HEADER

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

Backtrace_INCLUDE_DIR

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

Backtrace_LIBRARY

提供 backtrace 功能的外部库,如果有的话。

示例

查找 Backtrace 并将其链接到项目目标(截至 CMake 3.30)

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)