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

已启用异常仍触发clang-tidy禁用异常错误的技术问询

问题描述

在CMake项目中通过以下配置启用clang-tidy集成:

set(CMAKE_CXX_CLANG_TIDY 
  clang-tidy;
  -header-filter=.;
  --config-file=${MY_CLANG_TIDY_CONFIG_PATH};
)

.clang-tidy配置文件仅包含命名规范检查规则。执行构建命令:

cmake --build --preset=ninja-wd --target=Eureka.Core

时,clang抛出错误:

error: cannot use 'throw' with exceptions disabled [clang-diagnostic-error]
            throw std::system_error(ec, "system error");

已知cl.exe已传入/EHsc参数启用异常,且禁用clang-tidy集成后项目可正常构建。

问题原因与解决办法
  • 核心原因:clang-tidy在分析代码时未正确继承cl.exe的/EHsc编译参数,导致它误判当前环境未启用异常支持,触发诊断错误。
  • 解决办法:
    1. 明确在CMake中传递/EHsc参数,确保clang-tidy能获取到:
      • 全局生效:
        add_compile_options(/EHsc)
        
      • 仅针对目标生效:
        target_compile_options(Eureka.Core PRIVATE /EHsc)
        
    2. 若全局/目标配置无效,直接在clang-tidy启动参数中添加--extra-arg=/EHsc,强制指定启用异常:
      set(CMAKE_CXX_CLANG_TIDY 
        clang-tidy;
        -header-filter=.;
        --config-file=${MY_CLANG_TIDY_CONFIG_PATH};
        --extra-arg=/EHsc;
      )
      
    3. 可通过添加--dump-config参数到clang-tidy配置中,查看实际生效的编译参数,确认/EHsc是否被正确加载。

内容的提问来源于stack exchange,提问作者Elad Maimoni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:58