Ich versuche clang-tidy
unter Windows zu verwenden - bisher ohne erfolgreich zu sein.Clang-Tidy unter Windows mit MSVC2015
Als Voraussetzung habe ich LLVM 3.9.1 installiert.
Mein normaler Compiler ist MSVC 2015, mein Build-System ist QBS 1.7.2. Mit QBS habe ich compile_commands.json
generiert. Natürlich enthält diese Datei MSVC 2015 cl.exe
Flags/Argumente. Hier ist ein Auszug den Eintrag für eine Datei zeigt:
{
"arguments": [
"C:/Programs/MVS14/VC/bin/amd64/cl.exe",
"/nologo",
"/c",
"/EHsc",
"/Zi",
"/MDd",
"/IC:\\some_ci_job_folder\\src\\some_component\\include",
"/IC:\\some_ci_job_folder\\src\\some_needed_component\\include",
"/IC:\\Programs\\Qt\\Online\\5.6\\msvc2015_64\\include",
"/IC:\\Programs\\Qt\\Online\\5.6\\msvc2015_64\\include\\QtCore",
"/IC:\\Programs\\Qt\\Online\\5.6\\msvc2015_64\\mkspecs\\win32-msvc2015",
"/IC:\\some_ci_job_folder\\target\\build\\win64-vc14-qt56x-debug\\some_component.win64-vc14-qt56x.ce20db24\\qt.headers",
"/D_MBCS",
"/DWIN32",
"/DQT_CORE_LIB",
"/DNOMINMAX",
"/DQT_DISABLE_DEPRECATED_BEFORE=0x000000",
"/DVERSION_ID=\"MAJOR_UNDEF.MINOR_UNDEF-REVISION_UNDEF\"",
"/DVERSION_MAJOR=0",
"/DVERSION_MINOR=0",
"/DVERSION_REVISION=0",
"/DUSES_QT",
"/D_DEBUG",
"/D__mswin__",
"/DUSE_RVALUE_REFS=1",
"/D_CRT_SECURE_NO_DEPRECATE",
"/D_SCL_SECURE_NO_WARNINGS",
"/DWINVER=0x0502",
"/D_WIN32_WINNT=0x0502",
"/D_WIN32_WINDOWS=0x0502",
"/TP",
"/FS",
"/Zm200",
"/W4",
"/FS",
"/GR",
"/wd4018",
"/wd4063",
"/wd4100",
"/wd4121",
"/wd4127",
"/wd4150",
"/wd4189",
"/wd4238",
"/wd4239",
"/wd4244",
"/wd4245",
"/wd4267",
"/wd4290",
"/wd4389",
"/wd4510",
"/wd4512",
"/wd4610",
"/wd4718",
"/wd4481",
"/FoC:\\some_ci_job_folder\\target\\build\\win64-vc14-qt56x-debug\\some_component.win64-vc14-qt56x.ce20db24\\.obj\\f27fede2220bcd32\\foo.cpp.obj",
"/FdC:\\some_ci_job_folder\\target\\build\\win64-vc14-qt56x-debug\\some_component.win64-vc14-qt56x.ce20db24\\.obj\\f27fede2220bcd32\\",
"C:\\some_ci_job_folder\\src\\some_component\\src\\foo.cpp"
],
"directory": "C:/some_ci_job_folder/target/build/win64-vc14-qt56x-debug/some_component.win64-vc14-qt56x.ce20db24/.obj",
"file": "C:/some_ci_job_folder/src/some_component/src/foo.cpp"
},
Umstellung auf den Job/Projektordner C:/some_ci_job_folder/
und läuft
clang-tidy -p target\build\win64-vc14-qt56x-debug src\some_component\src\foo.cpp 1>clang-tidy.txt 2>&1
gibt mir die folgenden Warnungen und ein Fehler:
... warnings and 1 error generated.
Error while processing C:\some_ci_job_folder\src\some_component\src\foo.cpp.
warning: /DNOMINMAX: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /DQT_CORE_LIB: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
... more warnings about defines ...
warning: /D_WIN32_WINDOWS=0x0502: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /D_WIN32_WINNT=0x0502: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /D__mswin__: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /EHsc: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /FS: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /FdC:\some_ci_job_folder\target\build\win64-vc14-qt56x-debug\some_component.win64-vc14-qt56x.ce20db24\.obj\f27fede2220bcd32\: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /FoC:\some_ci_job_folder\target\build\win64-vc14-qt56x-debug\some_component.win64-vc14-qt56x.ce20db24\.obj\f27fede2220bcd32\foo.cpp.obj: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /GR: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /IC:\Programs\Qt\Online\5.6\msvc2015_64\include: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /IC:\Programs\Qt\Online\5.6\msvc2015_64\include\QtCore: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /IC:\Programs\Qt\Online\5.6\msvc2015_64\mkspecs\win32-msvc2015: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /IC:\some_ci_job_folder\src\shared\some_needed_component\include: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /IC:\some_ci_job_folder\src\shared\some_component\include: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /IC:\some_ci_job_folder\target\build\win64-vc14-qt56x-debug\some_component.win64-vc14-qt56x.ce20db24\qt.headers: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /MDd: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /TP: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /W4: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /Zi: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /Zm200: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /c: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /nologo: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
warning: /wd4189: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
... more warnings ...
warning: /wd4718: 'linker' input unused [clang-diagnostic-unused-command-line-argument]
C:\some_ci_job_folder\src\some_component\src/foo.h:71:10: error: 'some_needed_component/bar.h' file not found [clang-diagnostic-error]
#include "some_needed_component/bar.h"
^
Eine Idee, warum clang-tidy
die cl
Optionen nicht korrekt interpretiert (standardmäßig)?
Okay, nach dem googeln habe ich festgestellt, dass das Hinzufügen von --driver-mode=cl
Dinge verbessern könnte. Aber
clang-tidy -p target\build\win64-vc14-qt56x-debug src\some_component\src\foo.cpp -- --driver-mode=cl 1>clang-tidy.txt 2>&1
gibt mir noch
1 warning and 1 error generated.
Error while processing C:\some_ci_job_folder\src\some_component\src\foo.cpp.
warning: unknown argument ignored in clang-cl: '-resource-dir=C:\Programs\LLVM-3.9.1\bin\..\lib\clang\3.9.1' [clang-diagnostic-unknown-argument]
C:\some_ci_job_folder\src\some_component\src/foo.h:71:10: error: 'some_needed_component/bar.h' file not found [clang-diagnostic-error]
#include "some_needed_component/bar.h"
^
So ist es nicht mehr beschwert sich über den Weg Argumente sind aber soweit ich diese Argumente sagen können, werden einfach ignoriert?
BTW: Ich laufe clang-tidy
aus dem Developer Command Prompt for VS2015
. Bisher bin ich mir nicht wirklich sicher, ob dies erforderlich ist?
Irgendwelche Ideen ... wie man das Problem löst, wie man die Auswertung der include Pfadargumente debuggt, ...?