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

如何阻止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论坛相关解决方案,均无法解决问题。

核心疑问

  1. 这类标准库头文件找不到的错误,是否是因为clang-tidy无法正确定位系统标准库路径导致的?
  2. 如何配置才能让clang-tidy只检查src/目录下的自有源码,完全跳过第三方依赖、测试依赖的代码?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:09:59