FindBacktrace

Finds backtrace(3), a library that provides functions for application self-debugging:

find_package(Backtrace [...])

This module checks whether backtrace(3) is supported, either through the standard C library (libc), or a separate library.

Imported Targets

This module provides the following Imported Targets:

Backtrace::Backtrace

Added in version 3.30.

An interface library encapsulating the usage requirements of Backtrace. This target is available only when Backtrace is found.

Result Variables

This module defines the following variables:

Backtrace_FOUND

Boolean indicating whether the backtrace(3) support is available.

Backtrace_INCLUDE_DIRS

The include directories needed to use backtrace(3) header.

Backtrace_LIBRARIES

The libraries (linker flags) needed to use backtrace(3), if any.

Cache Variables

The following cache variables are also available to set or use:

Backtrace_HEADER

The header file needed for backtrace(3). This variable allows dynamic usage of the header in the project code. It can also be overridden by the user.

Backtrace_INCLUDE_DIR

The directory holding the backtrace(3) header.

Backtrace_LIBRARY

The external library providing backtrace, if any.

Examples

Finding Backtrace and linking it to a project target as of CMake 3.30:

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

The Backtrace_HEADER variable can be used, for example, in a configuration header file created by 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"

If the project needs to support CMake 3.29 or earlier, the imported target can be defined manually:

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)