如何基于现有ROS安装创建CMake伪目标以跳过clang-tidy冗余检查
结论
该方案完全可行,是处于ROS依赖剥离过渡阶段项目的标准处理方案。
具体实现逻辑
你可以通过CMake的INTERFACE类型导入目标实现这个伪ROS目标,同时配合系统头文件标记,双重保证clang-tidy跳过ROS代码检查:
- 先创建全局的伪ROS头文件目标,将ROS头文件路径关联到该目标,同时标记为系统头文件:
# 创建全局导入型伪ROS目标 add_library(ros_foxy INTERFACE IMPORTED GLOBAL) set_target_properties(ros_foxy PROPERTIES # 关联ROS头文件路径 INTERFACE_INCLUDE_DIRECTORIES "/opt/ros/foxy/include/" # 标记为系统头文件,clang-tidy默认不会检查系统路径下的代码 INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "/opt/ros/foxy/include/" # 显式禁用该目标的clang-tidy检查,双重保险 CXX_CLANG_TIDY "" )
- 替换原有硬编码头文件路径的写法,改为依赖上面创建的伪目标:
# 替换原来直接写/opt/ros/foxy/include/的配置 target_link_libraries(${LIBRARY} PRIVATE ros_foxy)
额外优势
这种写法除了能解决clang-tidy的检查问题外,也刚好适配你当前逐步移除ROS依赖的需求:后续要完全砍掉ROS依赖时,只需要删除ros_foxy目标的定义以及对应链接逻辑即可,不需要全局搜索替换硬编码的ROS路径,改造成本极低。
可选极简替代方案
如果你不需要统一管理ROS依赖,也可以直接给原来的头文件路径加SYSTEM关键字,不需要创建伪目标也能实现跳过检查:
target_include_directories(${LIBRARY} SYSTEM PRIVATE /opt/ros/foxy/include/ )
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

