2017-02-10 4 views
0

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, ...?

Antwort

2

Ich bin ein Cppcheck-Entwickler.

Clang-Tidy wurde in die Cppcheck-GUI integriert.

Sie können clang-tidy auf Compile-Datenbanken oder Visual Studio-Lösungen mithilfe der Cppcheck-GUI ausführen. Cppcheck GUI verwendet einen eigenen Kompilier-Datenbank-Parser, der möglicherweise anders funktioniert als der Clar-Tidy-eingebaute Parser.

Es ist ein kostenloses Open Source (GPL) -Tool. Es kann hier heruntergeladen werden: http://cppcheck.sf.net

Hier einige Screenshots sind: http://cppcheck.sf.net/clangtidy/index.html

Fühlen Sie sich frei, es zu versuchen und zögern Sie nicht, mir zu sagen, ob es etwas, das wir beheben können.