如何阻止clang-tidy检查FetchContent拉取的依赖源码?
问题:clang-tidy检查依赖库头文件报错,无法跳过依赖代码检查
现有CMake配置
# ... find_program(CLANG_TIDY_EXE NAMES "clang-tidy") set(CLANG_TIDY_COMMAND "${CLANG_TIDY_EXE}") macro(target_enable_clang_tidy TARGET) set_target_properties(${TARGET} PROPERTIES C_CLANG_TIDY "${CLANG_TIDY_COMMAND}") set_target_properties(${TARGET} PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}") endmacro() FetchContent_Declare( cxxopts GIT_REPOSITORY https://github.com/jarro2783/cxxopts.git GIT_TAG 3bf268481da8208d171d8908e6491459de3651d7 #v3.2.0 ) FetchContent_MakeAvailable(cxxopts) message(cxxopts="${cxxopts_SOURCE_DIR}/include") file(GLOB_RECURSE SRC_FILES "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/**/*.cpp" ) message(SRC_FILES=${SRC_FILES}) add_library(filc_lib ${SRC_FILES}) target_include_directories(filc_lib PUBLIC "${PROJECT_SOURCE_DIR}/include" "${cxxopts_SOURCE_DIR}/include") target_compile_options(filc_lib PUBLIC -Wall) target_enable_clang_tidy(filc_lib) # ...
遇到的问题
开启clang-tidy编译时,FetchContent拉取的第三方依赖库头文件出现标准库头文件找不到的错误,但关闭clang-tidy后编译完全正常。同时希望clang-tidy仅检查自有源码,不扫描任何依赖库的代码,但尝试多种方法均未奏效。
具体错误示例
cxxopts依赖报错
/home/kevin/dev/FIL/filc/build_release/_deps/cxxopts-src/include/cxxopts.hpp:30:10: error: 'cstdlib' file not found [clang-diagnostic-error] 30 | #include <cstdlib> | ^~~~~~~~~
googletest依赖报错(移除cxxopts后测试出现)
/home/kevin/dev/FIL/filc/build_unit_tests/_deps/googletest-src/googletest/include/gtest/gtest.h:52:10: error: 'cstddef' file not found [clang-diagnostic-error] 52 | #include <cstddef> | ^~~~~~~~~
测试文件报错
/home/kevin/dev/FIL/filc/tests/e2e/test_tools.h:27:10: error: 'string' file not found [clang-diagnostic-error] 27 | #include <string> | ^~~~~~~~
已尝试的解决方法
- 递归匹配
_deps目录下的所有文件,通过set_source_files_properties(${DEP_FILES} PROPERTIES SKIP_LINTING ON)标记跳过检查,无效。 - 查阅CMake论坛相关解决方案,均无法解决问题。
核心疑问
- 这类标准库头文件找不到的错误,是否是因为clang-tidy无法正确定位系统标准库路径导致的?
- 如何配置才能让clang-tidy只检查
src/目录下的自有源码,完全跳过第三方依赖、测试依赖的代码?
内容的提问来源于stack exchange,提问作者Gashmob
相关产品推荐
相关产品推荐

