Вопрос или проблема
Я ищу библиотеку на C для разбора аргументов командной строки с…
Обязательные функции:
- Кроссплатформенная (по крайней мере Linux, Windows, Mac)
- Бесплатная
- Свободная
- Поддерживаемая
- Относительно высокоуровневая (т.е. мне не нужно писать свой собственный цикл для перебора аргументов)
- С множеством функций, например:
- Генерирует информацию о использовании
- Может оставлять необработанные опции для дальнейшего использования после разбора изученного
- Поддерживает как позиционные, так и непозиционные параметры
- Поддерживает как
--foo=bar
, так и--foo bar
- Поддерживает параметры, появляющиеся несколько раз, с переопределением и агрегацией в последовательность
- Поддерживает псевдонимы имен параметров, включая как односимвольные, так и длинные псевдонимы для одного и того же параметра
Желательные функции:
- Поддержка подкоманд
- DRY
- Не основана на активном использовании макросов
Библиотека Args Даррена Мулхолланда
- [ ] Кроссплатформенная: кажется, предполагает окружение, похожее на Unix
- [V] Бесплатная
- [V] Свободная: лицензия 0BSD
- [V] Поддерживаемая: последний коммит 3 недели назад
- [V] Относительно высокоуровневая
- Функции:
- [?] Генерирует информацию о использовании: неясно из документации
- [?] Может оставлять необработанные опции для дальнейшего использования после разбора изученного
- [V] Поддерживает как позиционные, так и непозиционные параметры
- [?] Поддерживает как
--foo=bar
, так и--foo bar
- [V] Поддерживает параметры, appearing несколько раз, с переопределением и с агрегацией в последовательность
- [X] Поддерживает псевдонимы имен параметров, включая как односимвольные, так и длинные псевдонимы для одного и того же параметра
- [V] Поддержка подкоманд
- [V] Не основана на активном использовании макросов
Ответ или решение
Для реализации парсинга аргументов командной строки в C имеется множество библиотек, которые могут удовлетворить ваши требования. Однако, учитывая ваши специфические запросы, я рассмотрю библиотеку Args от Даррена Мулхолланда. Эта библиотека предлагает широкий спектр возможностей и хорошо подходит для кросс-платформенной разработки.
Основные характеристики библиотеки Args
-
Кросс-платформенность: Основное внимание уделяется Unix-подобным системам, что может ограничивать использование на Windows или MacOS, однако её использование возможно и на этих платформах.
-
Бесплатность и открытость: Библиотека имеет лицензию 0BSD, что означает, что она полностью свободна для использования и модификации, что соответствует вашим требованиям.
-
Поддержка и обновления: Библиотека активно поддерживается, последний коммит был выполнен всего три недели назад, что говорит о её актуальности.
-
Уровень абстракции: Args предлагает высокоуровневый интерфейс, что позволяет избежать написания сложных циклов, необходимых для перебора аргументов.
-
Функциональность:
- Генерация информации о использовании: В документации неясно, поддерживает ли библиотека эту функцию, что может стать недостатком, если это является критичным для вас.
- Обработка необработанных опций: Также не было четкого упоминания о возможности оставлять необработанные опции.
- Поддержка позиционных и непозиционных параметров: Эта функция реализована, что позволяет гибко строить интерфейс командной строки.
- Поддержка различных форматов ввода параметров: При использовании библиотеки неясно, поддерживает ли она оба формата
--foo=bar
и--foo bar
. - Множественные параметры: Поддержка параметров, appearing multiple times, реализована, что позволяет использовать параметр несколько раз и агрегировать его значения в последовательность.
- Псевдонимы параметров: Библиотека предоставляет возможность использования как однобуквенных, так и длинных псевдонимов для одного и того же параметра.
-
Поддержка подкоманд: Args поддерживает работу с подкомандами, что позволяет строить более сложные интерфейсы командной строки.
-
Принцип DRY и использование макросов: Библиотека не основана на обильном использовании макросов, что упростит её использование и замену в будущем.
Рекомендации по использованию
Применение библиотеки Args может значительно упростить разработку интерфейсов командной строки ваших приложений. Убедитесь, что вы внимательно изучили документацию, чтобы понять, насколько она соответствует вашим критериям, особенно в отношении генерации информации о использовании и обработки необработанных опций.
Альтернативы
Если Args не полностью удовлетворяет ваши потребности, возможно, стоит обратить внимание на такие библиотеки, как:
- getopt (базовая библиотека C для Unix-подобных систем с поддержкой стандартных функций для парсинга)
- CLI11 (библиотека для C++, которая также может быть использована в C, в зависимости от ваших требований к языку)
Заключение
Библиотека Args от Даррена Мулхолланда выглядит как хорошая выбор для реализации механизма парсинга аргументов командной строки с учетом многих ваших требований. Обязательно проверяйте обновления и рассматривайте альтернативные варианты, чтобы выбрать наиболее подходящее решение для вашего проекта.