clang-tidy - 这个 clang-tidy 命令行有什么问题?
问题描述
我正在尝试使用 clang-tidy 来分析我的项目。我正在使用以下命令行。
"C:\Program Files\LLVM\bin\clang-tidy.exe" -p G:\src\svn\SnKOpen\cpp\TTSApp\trunk\TTSApp --extra-arg=-D_DLL --extra-arg=-D_MT --extra-arg=-fms-compatibility-version=19.10 --extra-arg=-Wall --extra-arg=-Wmicrosoft --extra-arg=-Wno-invalid-token-paste --extra-arg=-Wno-unknown-pragmas --extra-arg=-Wno-unused-value "--extra-arg=-cxx-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Include" --extra-arg=-cxx-isystemD:\vcpkg\installed\x64-windows\include --extra-arg=-cxx-isystemD:\vcpkg\installed\x86-windows\include "--extra-arg=-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include" "--extra-arg=-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include" "--extra-arg=-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um" "--extra-arg=-isystemC:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Include" --extra-arg=-isystemD:\vcpkg\installed\x64-windows\include --extra-arg=-isystemD:\vcpkg\installed\x86-windows\include G:\src\svn\SnKOpen\cpp\TTSApp\trunk\TTSApp\TTSApp.cpp
我对 isystem 命令行参数的理解是它向 SYSTEM 包含搜索路径添加了一个目录。我对 clang-tidy 的理解是,如果您不使用 -system-headers 命令行参数,它将不会包含来自系统头文件的问题。另外,我的理解是,系统头文件是位于isystem列表中任何目录或isystem列表中某个目录下的任何目录中的那些。
对于位于“D:\vcpkg\installed\x64-windows\include\boost...”下的 Boost 标头,我遇到了很多问题。问题是目录“D:\vcpkg\installed\x64-windows”在我的 isystem 列表中,而目录“D:\vcpkg\installed\x64-windows\include\boost...”在“D: \vcpkg\installed\x64-windows。”
如果我对 clang-tidy 的理解和 isystem 命令行参数的目的是正确的,那么 clang-tidy 不应该因为这些问题而困扰我。
我还尝试了以下命令行参数。
"C:\Program Files\LLVM\bin\clang-tidy.exe" -p G:\src\svn\SnKOpen\cpp\TTSApp\trunk\TTSApp G:\src\svn\SnKOpen\cpp\TTSApp\trunk\TTSApp\TTSApp.cpp -- -D_DLL -D_MT -fms-compatibility-version=19.10 -Wall -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -cxx-isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include" -cxx-isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include" -cxx-isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" -cxx-isystem "C:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um" -cxx-isystem "C:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Include" -cxx-isystem D:\vcpkg\installed\x64-windows\include -cxx-isystem D:\vcpkg\installed\x86-windows\include -isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include" -isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include" -isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" -isystem "C:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um" -isystem "C:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Include" -isystem D:\vcpkg\installed\x64-windows\include -isystem D:\vcpkg\installed\x86-windows\include
结果是一样的。
解决方案
我想到了。事实证明,无论是命令行还是我对 isystem 命令行参数的预期功能的理解都没有问题。
问题是我没有意识到 Clang-Tidy 确定了两种不同类型的问题,警告和错误。
除非您使用 -system-headers 命令行参数,否则Clang-Tidy 不会因系统包含中发现的警告而打扰您。但是,没有什么可以抑制错误。让我如此恼火的 Boost 相关问题是错误。具体有以下错误的多个实例。
error: conflicting types for '${FunctionName}'
这些错误发生在几个 Windows API 函数中。通过定义 BOOST_USE_WINDOWS_H 可以防止这些错误。
推荐阅读
- google-chrome-devtools - 当返回“no-store, no-cache, must-revalidate”时,Chrome 的开发者工具会显示响应内容吗?
- android - 如何验证用户是否是 Android 应用程序上的学生
- html - css和firefox的问题
- sql-server - 始终显示计数结果为 0 的行 (1)
- apache-spark - Spark Structured Streaming 中的窗口操作
- jmeter - 随时间变化的活动线程图未更新
- java - 直接从maven部署war到appserver
- c++ - 关于使用泰勒级数计算 sin(x) 的问题
- excel - 将一个字符串与一列字符串进行比较并返回匹配 ID Excel
- php - PHP Slim RESTful API - 两个表连接嵌套 JSON