Я начинающий пользователь SonarQube.
Я пытался проанализировать некоторые исходные файлы CPP через SonarQube (с Сонар-CXX плагин), эти (исходные) файлы содержат некоторые фрагменты кода QT (наследование от QSharedData & несколько макросов QT), но в результате я выдаю странные ошибки от SonarQube Runner:
08:28:13.903 WARN - [D:\src\GrainBlitter\modules\CEDualString.h:3]: cannot find the sources for '#include <QSharedData>'
08:28:13.907 WARN - [D:\src\GrainBlitter\modules\CEDualString.h:4]: cannot find the sources for '#include <QtGlobal>'
08:28:13.930 ERROR - Unable to parse file: D:\src\GrainBlitter\modules\CEDualString.cpp
08:28:13.933 ERROR - Parse error at line 3 column 39:
--> __classCCEDualString::CCEDualStringData: __publicQSharedData
4: {
5: __public:
6: CCEDualStringData() {}
7: CCEDualStringData( const CCEDualStringData& other ) : QSharedData( other ), m_ascii( other.m_ascii )
08:28:13.964 WARN - [D:\src\GrainBlitter\modules\CEDualString.h:3]: cannot find the sources for '#include <QSharedData>'
08:28:13.969 WARN - [D:\src\GrainBlitter\modules\CEDualString.h:4]: cannot find the sources for '#include <QtGlobal>'
08:28:13.987 ERROR - Unable to parse file: D:\src\GrainBlitter\modules\CEDualString.h
08:28:13.990 ERROR - Parse error at line 50 column 0:
47: inline bool operator == ( const QString& l, const CCEDualString& r ) { return l == r.unicode(); }
48:
49: Q_DECLARE_METATYPE( CCEDualString )
--> Q_DECLARE_METATYPE( CCEDualStringsList )EOF
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
Total time: 5.571s
Final Memory: 9M/118M
INFO: ------------------------------------------------------------------------
ERROR: Error during Sonar runner execution
ERROR: Unable to execute Sonar
ERROR: Caused by: COMMENT_BLANK_LINES
Файл свойств (sonar-project.properties) выглядит так:
# Required metadata
sonar.projectKey=GrainBlitter
sonar.projectName=GrainBlitter 0x01
sonar.projectVersion=0.0.xx
# Comma-separated paths to directories with sources (required)
sonar.sources=modules
#sonar.tests=UnitTests
# Language, needed for SonarQube < 4.2
sonar.language=c++
# Path to included files
sonar.cxx.include_directories=C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include,D:/Qt/qt-5.3.1-x64-msvc2012-opengl/qt-5.3.1-x64-msvc2012-opengl/include/,D:/Qt/qt-5.3.1-x64-msvc2012-opengl/qt-5.3.1-x64-msvc2012-opengl/include/QtCore
sonar.cxx.cppcheck.path=C:/Program Files (x86)/Cppcheck/cppcheck.exe
# Encoding of the source files
sonar.sourceEncoding=UTF-8
# exclude qt created files
sonar.exclusions=**/ui_*.h
Я указываю QT include dir в переменной [sonar.cxx.include_directories], может быть не правильно? Пожалуйста, дайте мне пример файла sonar-project.properties с правильной связью с библиотекой QT. Спасибо!
Постскриптум Заголовок QSharedData включен в мои заголовки
Это очень вероятно из-за расширения, которое qt сделал для языка C ++ (который, если я помню, идет дальше, чем несколько макросов).
Я не знаю, сможет ли сонар справиться с этим изначально (или есть ли плагин), но в качестве первого подхода вы можете запустить анализ источников после того, как они были преобразованы препроцессором qt (moc).