如何在CMake中抑制上游库的clang-tidy警告
解决方案:将spdlog标记为SYSTEM库以抑制clang-tidy警告
针对你遇到的spdlog头文件宏重定义警告被clang-tidy视为错误的问题,以下是两种可行的CMake方案,无需修改上游库代码或关闭检查:
方案1:修改spdlog导入目标的系统包含属性(推荐)
现代CMake中,find_package(spdlog)会生成spdlog::spdlog导入目标。你可以通过修改该目标的INTERFACE_SYSTEM_INCLUDE_DIRECTORIES属性,将其头文件标记为系统头文件——clang-tidy默认会跳过系统头文件的静态分析,从而避免上游库的警告触发错误。
具体CMake代码如下:
find_package(spdlog REQUIRED) # 将spdlog的包含目录标记为SYSTEM set_property(TARGET spdlog::spdlog PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $<TARGET_PROPERTY:spdlog::spdlog,INTERFACE_INCLUDE_DIRECTORIES> ) # 正常链接目标 target_link_libraries(project_packages PRIVATE spdlog::spdlog)
方案2:手动添加SYSTEM包含目录(兼容旧版CMake)
如果你的CMake版本较旧,或find_package未生成导入目标,可直接通过target_include_directories添加spdlog的系统包含目录,再链接库:
find_package(spdlog REQUIRED) # 以SYSTEM方式添加spdlog的头文件目录 target_include_directories(project_packages SYSTEM PRIVATE ${spdlog_INCLUDE_DIRS}) # 链接spdlog库 target_link_libraries(project_packages PRIVATE ${spdlog_LIBRARIES})
这两种方案都能让CMake告知编译器将spdlog的头文件当作系统库处理,clang-tidy会自动忽略这些文件的检查,从根源上解决宏重定义警告被视为错误的问题,且无需修改上游代码或临时关闭检查规则。
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

