С «Eclipse and PC-lint: Linticator» у меня есть плагин для комфортного линтинга моих источников. Но я могу сделать это и без плагина. Для этого я использую командный файл с конфигурацией сборки и настройками, чтобы сообщения ПК-линта отображались в окне «Проблемы». Да, это звучит не просто, но очень выполнимо и понятно, как только я его настрою. Это дает мне полный контроль над каждой маленькой деталью. Вот как я это делаю …PC-lint похож на любой другой компилятор: он компилирует мои исходные файлы. Но он не производит объектный код: он производит сообщения. Поэтому мне нужно настроить компилятор для компиляции моих исходных кодов и для создания сообщений, чтобы я мог щелкать и переходить к исходным файлам и строкам, которые нарушали их работу. Запуск PC-lint с проектом в Eclipse означает решение трех задач:
- Как настроить PC-lint в качестве компилятора для моего проекта?
- Как передать параметры компилятору PC-lint?
- Как настроить сообщения для представления «Проблемы»?
Я использую совместный подход с конфигурацией сборки eclipse , командным файлом и файлами опций lint . Представленное здесь решение использует следующие шаги:
- Использование управляемой конфигурации сборки сборки
- Настройка командного файла для вызова PC-lint
- Определение списка файлов
- Указание опций
- Определение формата сообщения
- Линт это !
Шаг 1: Конфигурация сборки
В свой существующий проект я добавляю конфигурацию управляемой сборки для PC-lint. Конфигурация сборки настроена для вызова командного файла. Я выбираю проект и использую меню Project> Build Configuration> Manage… и создаю новую конфигурацию, используя кнопку New :
Для новой конфигурации я копирую настройки из существующей конфигурации:
Эта новая конфигурация будет использовать мой обычный компилятор. Вместо этого я хочу использовать компилятор lint. В Project> Properties> C / C ++ Build> Builder Settings я отключаю « Использовать команду сборки по умолчанию » и вместо этого использую:
${ProjDirPath}\lint\do_lint.bat "${ProjDirPath}" "${MCUToolsBaseDir}"
Я указываю на файл do_lint.bat внутри папки lint моего проекта, который я создам на следующем шаге. Дополнительно я отключаю « Автоматически генерировать Makefile »:
CodeWarrior для MCU10.2 по умолчанию использует параллельные сборки. Это добавит -j6 как параметр в командную строку. Чтобы отключить это, я настраиваю специфичные для проекта настройки на вкладке Build Behavior:
Шаг 2: Пакетный файл
Чтобы отделить файлы lint от остальной части моей сборки и проекта, я создаю подпапку lint внутри корня моего проекта с помощью пакетного файла do_lint.bat:
Do_lint.bat имеет следующий контент:
@rem The arguments for this batch file: @rem %1: The path to the project folder @rem %2: The path to the CodeWarrior installation folder @rem ------------------------------------------------------ @rem Path to my project folder SET PROJ_PATH=%1 @rem Path to CodeWarrior installation folder (which is e.g. "C:\Freescale\CW MCU v10.2\eclipse\..\MCU") SET CW_PATH=%2 @rem Path to lint-nt.exe SET LINT_EXE=C:\lint\lint-nt.exe @rem Path to my lint configuration files SET LOCAL_LNT_FILES=C:\Freescale\PC-lint\fsl_lnt @rem Path to my local lint folder inside the project SET PROJ_LINT_PATH=%PROJ_PATH%\lint @rem Lint configuration files and includes SET LNT_INCLUDES=-i"%LOCAL_LNT_FILES%" "%LOCAL_LNT_FILES%\co-mwhc08.lnt" -i%LOCAL_LNT_FILES% @rem --------------- Run PC-lint --------------------------- %LINT_EXE% %LNT_INCLUDES% %PROJ_LINT_PATH%\proj_options.lnt %PROJ_LINT_PATH%\proj_files.lnt -vf
Пакетный файл вызывается из eclipse с двумя аргументами (% 1 и% 2): с путем к папке проекта и путем к папке установки CodeWarrior. Я назначаю их локальным переменным (PROJ_PATH и CW_PATH), чтобы использовать их в файлах .lnt. Чтобы узнать, где находится мой компилятор lint, я использую LINT_EXE. Я храню свои файлы конфигурации lint вне папки установки PC-lint, поэтому я определил переменную пути для этого: LOCAL_LINT_FILES. PROJ_LINT_PATH содержит подпапку проекта со всеми моими пакетными и линтовыми файлами для проекта. В LNT_INCLUDES я указываю свой файл конфигурации lint моего компилятора, плюс где lint будет искать мои файлы конфигурации lint. Наконец, он вызывает исполняемый файл lint с включаемыми файлами lint плюс два файла: параметры проекта (proj_options.lnt) ифайлы проекта (proj_files.lnt) . Я объясняю эти файлы в шаге 4.
Шаг 3: Список файлов
Я создал файл proj_files.lnt внутри моего проекта:
В этом файле перечислены все мои исходные файлы. И поскольку я определил переменные окружения, такие как PROJ_PATH, я могу использовать их здесь:
%PROJ_PATH%\Sources\main.c %PROJ_PATH%\Sources\Events.c
Шаг 4: Передача опций
Не хватает конкретных параметров проекта: я добавляю их в файл proj_options.lnt:
В этом файле я добавляю с опцией -i PC-lint все пути, где он может найти мои файлы:
// Include paths used -i%PROJ_PATH% -i%PROJ_PATH%\Sources -i%PROJ_PATH%\Generated_Code -i%CW_PATH%\lib\hc08c\include
Дополнительно я указываю все глобальные опции, например, для запрета сообщений:
// inhibit messages for Processor Expert libraries -elib(19, 10) -e766 +libh(Events.h, Cpu.h)
Step 5: Defining the message format
Last but not least: I need to tell PC-lint how to format the messages so they end up properly in the eclipse Problems view. I add them as well to the proj_options.lnt:
// Coerce messages for Eclipse -hF1 +ffn // Normally my format is defined as follows: //-"format=%(\q%f\q %l %C%) %t %n: %m" // For eclipse-usage, the GCC error format is necessary, // since we have only the default eclipse error parser available. -"format=%(%f:%l:%C:%) %t %n: %m" // Enable warning 831 if you are interested. -frl // Do not break lines -width(0) // And make sure no foreign includes change the format +flm
Step 5: Linting in action
Time to see how this works! As I have set up a separate build configuration to lint my files, I can run it like any other build configuration:
The example below shows several lint errors for main.c. The messages show up in the Problems view, and are listed as well in the Console view:
Summary
The approach presented here does not need any other eclipse plugin. It is using a batch file, and uses a brute force approach: it will lint all files regardless if they have changed or not. This could be improved with a make file approach as outlined here. The approach presented here requires some setup, is pretty simple, and routes all lint messages to the Problems view. If I want to use more of a plugin approach, then the Linticator plugin is the alternative.
Thanks to Catherine for providing a lot of good ideas used in this article!
Happy linting