Генератор конфигураций c/c++ для vscode из Makefile
Описание моего первого плагинчика для vscode

Возникла необходиомсть автоматической генерации конфигов на основе makefile. Нужно это в первую очередь для работы над проектом, который изначально не предполагался для разработки в vscode. А теперь и париться не нужно с поиском всех дефайнов и инклудов из makefile'ов которых может быть очень много.
В общем от слов к делу
Скачать можно здесь: Makefile to C/C++ config
Для ленивых приведу весь README здесь.
Принцип работы
Что бы было понятно как работать и как устранять проблемы.
- Из параметра
make-to-cpp-props.toolchainName
берется имя тулчейна, напримерarm-none-eabi-gcc
- На основе имени тулчейна создается "ловушка"
- При генерировании конфига вызывается команд
make
, а путь к пустышке добавляется в начало перечислений переменной средыPATH
. Тем самым "ловушка" подменяет собой реальный тулчейна и собирает параметры командной строки с которыми вызван тулчейн. - Собранные данные анализируются регулярными выражениями и заполняется структура файла конфига.
- Если конфиг с таким именем уже существует, то он обновляется, если нет - создается.
Исходный код "Ловушки"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE * fp = fopen("output.txt", "a+");
for (int i = 0; i < argc; i++) { fprintf(fp, "%s ", argv[i]); }
fprintf(fp, "\n");
fclose(fp);
return 0;
}
Настройки
Имена параметров начинаются с make-to-cpp-props.
, например "make-to-cpp-props.toolchainName"
Параметр | Тип | Комментарий | Значение по умолчанию |
---|---|---|---|
toolchainName | Строка | Имя тулчейна | arm-none-eabi-gcc |
debug.console-log | Boolean | Включает вывод отладочной информации | true |
defines-regexp | Строка | Шаблон регулярного выражения для дефайнов | /\s-D\s?([\w\=]*[\w\"\\\.]*)\s?/g |
includes-regexp | Строка | Шаблон регулярного выражения для инклудов | /\s-I\s?\"?([.\S\w]*)\"?/g |
generator.compilerPath | Boolean | Разрешает добавлять в конфиг путь к компилятору (работает криво) | false |
Настройки можно менять по своему усмотрению. Рекомендуется toolchainName
определять в настройках папки или воркспейса.
Как использовать
- Установить и настроить
- Вызвать контекстное меню на папке в которой лежит целевой Makefile. Поддерживаются стандартные имена "GNUmakefile", "makefile", "Makefile" и файлы ".mk"
- Запустить команду и дождаться выполнения.
Существующие проблемы
- Не поддерживается конфиг json с комментариями (обещаю исправить).
- Плохо работает объединение путей на разных платформах, поэтому пути в конфиге не красивые (обещаю исправить)
- Регулярки не красивые (я не специалист в них, буду рад помощи)
Планы
- Исправление проблемы
- Сделать генератор тасков с указанием нужных путей