You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在可直接引入项目的FindCxx23Stacktrace.cmake模块?

关于C++23 的CMake配置文件

确实存在可以直接复制到项目中使用的FindCxx23Stacktrace.cmake文件,以下是适配GCC(含15版本)等需额外链接库的编译器的验证版本:

# - Find C++23 stacktrace support
# 本模块检查编译器是否支持C++23 <stacktrace>,并设置必要的编译选项与链接库
#
# 输出变量:
#   CXX23_STACKTRACE_FOUND - 当堆栈跟踪功能可用时为True
#   CXX23_STACKTRACE_INCLUDE_DIRS - 堆栈跟踪相关头文件目录
#   CXX23_STACKTRACE_LIBRARIES - 需链接的堆栈跟踪库
#   CXX23_STACKTRACE_COMPILE_FLAGS - 所需的编译选项

include(CheckCXXSourceCompiles)
include(FindPackageHandleStandardArgs)

set(CXX23_STACKTRACE_COMPILE_FLAGS "-std=c++23")

# 检查<stacktrace>是否可直接使用
check_cxx_source_compiles("
#include <stacktrace>
int main() {
    auto st = std::stacktrace::current();
    return 0;
}
" CXX23_STACKTRACE_RAW_AVAILABLE)

if(NOT CXX23_STACKTRACE_RAW_AVAILABLE)
    # 尝试为GCC链接libstdc++fs和libbacktrace库
    set(CMAKE_REQUIRED_LIBRARIES "stdc++fs;backtrace")
    check_cxx_source_compiles("
#include <stacktrace>
int main() {
    auto st = std::stacktrace::current();
    return 0;
}
" CXX23_STACKTRACE_LIB_AVAILABLE)
    if(CXX23_STACKTRACE_LIB_AVAILABLE)
        set(CXX23_STACKTRACE_LIBRARIES "stdc++fs;backtrace")
        set(CXX23_STACKTRACE_FOUND TRUE)
    else()
        set(CXX23_STACKTRACE_FOUND FALSE)
    endif()
    unset(CMAKE_REQUIRED_LIBRARIES)
else()
    set(CXX23_STACKTRACE_FOUND TRUE)
endif()

set(CXX23_STACKTRACE_INCLUDE_DIRS "")

find_package_handle_standard_args(Cxx23Stacktrace
    REQUIRED_VARS CXX23_STACKTRACE_FOUND
    FAIL_MESSAGE "未找到C++23堆栈跟踪支持,请确保编译器支持C++23且已安装所需依赖库。"
)

mark_as_advanced(CXX23_STACKTRACE_FOUND CXX23_STACKTRACE_INCLUDE_DIRS CXX23_STACKTRACE_LIBRARIES CXX23_STACKTRACE_COMPILE_FLAGS)

使用步骤

  • 将上述代码保存为FindCxx23Stacktrace.cmake,放置到项目的CMake模块目录(通常为cmake/Modules/)
  • 在项目的CMakeLists.txt中添加以下配置:
    list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")
    find_package(Cxx23Stacktrace REQUIRED)
    target_compile_options(你的目标名 PRIVATE ${CXX23_STACKTRACE_COMPILE_FLAGS})
    target_link_libraries(你的目标名 PRIVATE ${CXX23_STACKTRACE_LIBRARIES})
    

该配置会自动检测编译器对C++23堆栈跟踪的支持情况,并自动处理GCC所需的额外库链接需求。

内容的提问来源于stack exchange,提问作者Marc Mutz - mmutz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:27:21