使用CMake+clang-tidy编译嵌入式目标时遇未识别参数错误
CMake + clang-tidy 嵌入式项目:解决ARM编译参数导致的错误
针对嵌入式项目中clang-tidy无法识别ARM-GCC特定编译参数(如-mcpu=cortex-m7、-mfloat-abi=hard)并触发错误的问题,有两种实用解决方案:
方案一:指定目标架构,让clang识别ARM参数
clang本身支持ARM目标平台,只需给clang-tidy添加--target=arm-none-eabi参数,就能让它正确识别ARM相关编译选项,避免误报“无用参数”错误。修改CMake配置如下:
if(CLANG_TIDY) set(CMAKE_CXX_CLANG_TIDY "clang-tidy; --extra-arg-before=--driver-mode=g++; --extra-arg-before=--target=arm-none-eabi" ) endif()
这种方案的优势是让clang-tidy基于ARM目标环境做更精准的代码检查,比如适配Cortex-M7的架构特性,减少无关误报。
方案二:直接忽略无用参数的警告
如果不需要clang-tidy针对ARM架构做特定检查,可直接禁用“未使用命令行参数”的警告,修改配置如下:
if(CLANG_TIDY) set(CMAKE_CXX_CLANG_TIDY "clang-tidy; --extra-arg-before=--driver-mode=g++; --extra-arg=-Wno-unused-command-line-argument" ) endif()
若你的项目全局开启了“警告转错误”,也可单独取消该诊断的错误级别:
if(CLANG_TIDY) set(CMAKE_CXX_CLANG_TIDY "clang-tidy; --extra-arg-before=--driver-mode=g++; --warnings-as-errors=-clang-diagnostic-unused-command-line-argument" ) endif()
补充:启用编译数据库
若希望clang-tidy借助编译数据库单独执行检查,需在CMake中开启编译命令导出:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
编译后,build目录会生成compile_commands.json,可通过以下命令单独运行clang-tidy:
clang-tidy -p build/ Core/Src/src/factorial.cpp
内容的提问来源于stack exchange,提问作者elhe
相关产品推荐
相关产品推荐

