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

如何禁用CPMAddPackage导入包的clang-tidy代码分析?

禁用CPM导入的mosquitto目标的clang-tidy检查

问题场景

全局通过CMAKE_CXX_CLANG_TIDY启用clang-tidy后,CPM导入的eclipse/mosquitto(2.0.11版本)因代码不符合检查规则导致构建失败,尝试设置目标的CMAKE_CXX_CLANG_TIDY属性或标记为SYSTEM目标均无效,使用CMake 3.27.7。

可行解决方案

1. 修正目标属性名(修复之前方法一的错误)

你之前误用了全局变量名CMAKE_CXX_CLANG_TIDY作为目标属性,但目标级别的clang-tidy属性是CXX_CLANG_TIDY(针对C++)和C_CLANG_TIDY(针对C),没有CMAKE_前缀。如果mosquitto包含C代码,需要同时设置C属性:

# 禁用C++目标的clang-tidy
set_target_properties(mosquitto PROPERTIES CXX_CLANG_TIDY "")
set_target_properties(libmosquitto PROPERTIES CXX_CLANG_TIDY "")
set_target_properties(mosquitto_pub PROPERTIES CXX_CLANG_TIDY "")
set_target_properties(mosquitto_sub PROPERTIES CXX_CLANG_TIDY "")
set_target_properties(mosquitto_rr PROPERTIES CXX_CLANG_TIDY "")

# 若mosquitto包含C代码,补充禁用C目标的clang-tidy
set_target_properties(mosquitto PROPERTIES C_CLANG_TIDY "")
set_target_properties(libmosquitto PROPERTIES C_CLANG_TIDY "")

2. 在CPM导入时直接传递参数禁用clang-tidy

利用CPM的CMAKE_ARGS,在导入mosquitto时直接覆盖其子项目的clang-tidy全局设置,从根源避免检查:

CPMAddPackage(
  NAME mosquitto
  GITHUB_REPOSITORY eclipse/mosquitto
  VERSION 2.0.11
  CMAKE_ARGS
    CMAKE_CXX_CLANG_TIDY=""
    CMAKE_C_CLANG_TIDY="" # 针对C代码的检查,按需添加
)

3. 使用CMake钩子在子项目配置前禁用

通过CMAKE_PROJECT_INCLUDE_BEFORE钩子,在mosquitto子项目启动配置时自动禁用clang-tidy,适用于批量处理子项目的场景:

# 生成临时脚本,当子项目是mosquitto时禁用clang-tidy
file(WRITE "${CMAKE_BINARY_DIR}/DisableClangTidyForMosquitto.cmake" "
if(PROJECT_NAME STREQUAL mosquitto)
  set(CMAKE_CXX_CLANG_TIDY \"\")
  set(CMAKE_C_CLANG_TIDY \"\")
endif()
")

# 设置钩子,所有子项目配置前执行该脚本
set(CMAKE_PROJECT_INCLUDE_BEFORE "${CMAKE_BINARY_DIR}/DisableClangTidyForMosquitto.cmake")

# 执行CPM导入
CPMAddPackage(
  NAME mosquitto
  GITHUB_REPOSITORY eclipse/mosquitto
  VERSION 2.0.11
)

4. 确认目标名称是否正确

部分情况下CPM导入的目标会带有命名空间前缀(如mosquitto::libmosquitto),可以通过以下代码打印所有目标,确认真实名称:

get_property(all_targets DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
message(STATUS "All available targets: ${all_targets}")

根据输出的目标名称,调整set_target_properties中的目标参数即可。


内容的提问来源于stack exchange,提问作者Gaetano Mendola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:00:28