Генератор конфигураций c/c++ для vscode из Makefile

Описание моего первого плагинчика для vscode

Возникла необходиомсть автоматической генерации конфигов на основе makefile. Нужно это в первую очередь для работы над проектом, который изначально не предполагался для разработки в vscode. А теперь и париться не нужно с поиском всех дефайнов и инклудов из makefile'ов которых может быть очень много.

В общем от слов к делу

Скачать можно здесь: Makefile to C/C++ config

Для ленивых приведу весь README здесь.

Принцип работы

Что бы было понятно как работать и как устранять проблемы.

  1. Из параметра make-to-cpp-props.toolchainName берется имя тулчейна, например arm-none-eabi-gcc
  2. На основе имени тулчейна создается "ловушка"
  3. При генерировании конфига вызывается команд make, а путь к пустышке добавляется в начало перечислений переменной среды PATH. Тем самым "ловушка" подменяет собой реальный тулчейна и собирает параметры командной строки с которыми вызван тулчейн.
  4. Собранные данные анализируются регулярными выражениями и заполняется структура файла конфига.
  5. Если конфиг с таким именем уже существует, то он обновляется, если нет - создается.

Исходный код "Ловушки"

#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 определять в настройках папки или воркспейса.

Как использовать

  1. Установить и настроить
  2. Вызвать контекстное меню на папке в которой лежит целевой Makefile. Поддерживаются стандартные имена "GNUmakefile", "makefile", "Makefile" и файлы ".mk"
  3. Запустить команду и дождаться выполнения.

how-to-use.gif

Существующие проблемы

  1. Не поддерживается конфиг json с комментариями (обещаю исправить).
  2. Плохо работает объединение путей на разных платформах, поэтому пути в конфиге не красивые (обещаю исправить)
  3. Регулярки не красивые (я не специалист в них, буду рад помощи)

Планы

  1. Исправление проблемы
  2. Сделать генератор тасков с указанием нужных путей