Кроссплатформенная C-библиотека для разбора аргументов командной строки

Вопрос или проблема

Я ищу библиотеку на C для разбора аргументов командной строки с…

Обязательные функции:

  1. Кроссплатформенная (по крайней мере Linux, Windows, Mac)
  2. Бесплатная
  3. Свободная
  4. Поддерживаемая
  5. Относительно высокоуровневая (т.е. мне не нужно писать свой собственный цикл для перебора аргументов)
  6. С множеством функций, например:
    • Генерирует информацию о использовании
    • Может оставлять необработанные опции для дальнейшего использования после разбора изученного
    • Поддерживает как позиционные, так и непозиционные параметры
    • Поддерживает как --foo=bar, так и --foo bar
    • Поддерживает параметры, появляющиеся несколько раз, с переопределением и агрегацией в последовательность
    • Поддерживает псевдонимы имен параметров, включая как односимвольные, так и длинные псевдонимы для одного и того же параметра

Желательные функции:

  • Поддержка подкоманд
  • DRY
  • Не основана на активном использовании макросов

Библиотека Args Даррена Мулхолланда

Сайт | Репозиторий на GitHub

  • [ ] Кроссплатформенная: кажется, предполагает окружение, похожее на Unix
  • [V] Бесплатная
  • [V] Свободная: лицензия 0BSD
  • [V] Поддерживаемая: последний коммит 3 недели назад
  • [V] Относительно высокоуровневая
  • Функции:
    • [?] Генерирует информацию о использовании: неясно из документации
    • [?] Может оставлять необработанные опции для дальнейшего использования после разбора изученного
    • [V] Поддерживает как позиционные, так и непозиционные параметры
    • [?] Поддерживает как --foo=bar, так и --foo bar
    • [V] Поддерживает параметры, appearing несколько раз, с переопределением и с агрегацией в последовательность
    • [X] Поддерживает псевдонимы имен параметров, включая как односимвольные, так и длинные псевдонимы для одного и того же параметра
  • [V] Поддержка подкоманд
  • [V] Не основана на активном использовании макросов

Ответ или решение

Для реализации парсинга аргументов командной строки в C имеется множество библиотек, которые могут удовлетворить ваши требования. Однако, учитывая ваши специфические запросы, я рассмотрю библиотеку Args от Даррена Мулхолланда. Эта библиотека предлагает широкий спектр возможностей и хорошо подходит для кросс-платформенной разработки.

Основные характеристики библиотеки Args

  1. Кросс-платформенность: Основное внимание уделяется Unix-подобным системам, что может ограничивать использование на Windows или MacOS, однако её использование возможно и на этих платформах.

  2. Бесплатность и открытость: Библиотека имеет лицензию 0BSD, что означает, что она полностью свободна для использования и модификации, что соответствует вашим требованиям.

  3. Поддержка и обновления: Библиотека активно поддерживается, последний коммит был выполнен всего три недели назад, что говорит о её актуальности.

  4. Уровень абстракции: Args предлагает высокоуровневый интерфейс, что позволяет избежать написания сложных циклов, необходимых для перебора аргументов.

  5. Функциональность:

    • Генерация информации о использовании: В документации неясно, поддерживает ли библиотека эту функцию, что может стать недостатком, если это является критичным для вас.
    • Обработка необработанных опций: Также не было четкого упоминания о возможности оставлять необработанные опции.
    • Поддержка позиционных и непозиционных параметров: Эта функция реализована, что позволяет гибко строить интерфейс командной строки.
    • Поддержка различных форматов ввода параметров: При использовании библиотеки неясно, поддерживает ли она оба формата --foo=bar и --foo bar.
    • Множественные параметры: Поддержка параметров, appearing multiple times, реализована, что позволяет использовать параметр несколько раз и агрегировать его значения в последовательность.
    • Псевдонимы параметров: Библиотека предоставляет возможность использования как однобуквенных, так и длинных псевдонимов для одного и того же параметра.
  6. Поддержка подкоманд: Args поддерживает работу с подкомандами, что позволяет строить более сложные интерфейсы командной строки.

  7. Принцип DRY и использование макросов: Библиотека не основана на обильном использовании макросов, что упростит её использование и замену в будущем.

Рекомендации по использованию

Применение библиотеки Args может значительно упростить разработку интерфейсов командной строки ваших приложений. Убедитесь, что вы внимательно изучили документацию, чтобы понять, насколько она соответствует вашим критериям, особенно в отношении генерации информации о использовании и обработки необработанных опций.

Альтернативы

Если Args не полностью удовлетворяет ваши потребности, возможно, стоит обратить внимание на такие библиотеки, как:

  • getopt (базовая библиотека C для Unix-подобных систем с поддержкой стандартных функций для парсинга)
  • CLI11 (библиотека для C++, которая также может быть использована в C, в зависимости от ваших требований к языку)

Заключение

Библиотека Args от Даррена Мулхолланда выглядит как хорошая выбор для реализации механизма парсинга аргументов командной строки с учетом многих ваших требований. Обязательно проверяйте обновления и рассматривайте альтернативные варианты, чтобы выбрать наиболее подходящее решение для вашего проекта.

Оцените материал
Добавить комментарий

Капча загружается...