Использование cppcheck для анализа Qt проектов
cppcheck - статический анализатор C++. Для анализа больших проектов требуется его настройка, позволяющая правильно искать и использовать библиотеки и другие зависимые во время компиляции параметры.
Для анализа Qt проектов существует утилита qpt, которая может производить анализ проектных файлов и получение из них информации об используемых исходниках, обо всех параметрах, передаваемых компилятору и другую служебную информацию.
Связка qpt и cppcheck позволяет провести статический анализ всего проекта без добавления вручную всех параметров cppcheck.
Установка qpt
Qt Project Tool (qpt) можно собрать вручную из исходников.
После сборки можно добавить путь к исполняемому файлу qpt в PATH или работать с qpt используя абсолютные пути. В PATH обязательно должен присутствовать путь к qmake и cppcheck.
Запуск cppcheck на всем Qt проекте
Для начала нужно определить список файлов проекта, которые требуют проверки:
qpt -A project.pro
Полученный список файлов нужно сохранить в файл. Пусть имя файла будет files:
qpt -A project.pro | sed -e '1,3d' > files
Для успешной проверки нужно задать INCLUDEPATH для cppcheck, как при компиляции с помощью gcc. Получить список необходимых INCLUDEPATH можно командой:
qpt -I project.pro
Нужно определить макроопределения при компиляции каждого файла в проекте:
qpt -D porject.pro
Затем нужно объединить результаты вывода qpt и передать их правильно в cppcheck.
Аргументы cppcheck: -I <путь>
- для каждого INCLUDEPATH
-D<макрос>
- для каждого макроопределения.
--suppress=missingInclude:*
- игнорировать ошибки при поиске включений Qt (и любых других директив include).
--inconclusive
- для продолжения анализа в случае невозможности компиляции файла.
-q
- вывод только сообщений об ошибках.
--enable
- уровни предупреждений. Рекомендую следующие уровни: perfomance,portability,style.
-i<путь>
- Пути или файлы, которые следует игнорировать.
-j <n>
- задать количество потоков для анализа. Нужно помнить, что при анализе в несколько потоков теряется возможность получать информацию о неиспользуемых функциях.
--language=c++
- задать язык для всех файлов как С++.
--file-list=files
- задать файл, содержащий все необходимые к проверки исходные коды.
TODO: добавить реальный пример.
Анализ проекта в 1 поток с помощью qpt является более простым и быстрым решением. Но при этом теряется возможность более тонкой настройки параметров, передаваемых в cppcheck. Пример команды запуска анализа всего проекта:
qpt --tool=cppcheck project.pro