scmdp
scmdp - simplest command-line parser
Кросс-платформенный парсер с простым интерфейсом на чистом "Си"
Особенности
- Легкодоступные и легкоредактируемые сообщения об ошибках
- Обязательные, опциональные и опциональные со значением аргументы
- Простое добавление новых аргументов в программу
- Автосборка help-сообщений
- Основана на кросс-платформенных стандартных библиотеках
- Автоматическое освобождение памяти
Быстрое начало
1. Добавьте библиотеку в свой проект
Библиотека scmdp содержит лишь два файла: scmdp.h в качестве интерфейса и scmdp.с с реализацией.
Ничего не нужно прекомпилировать или собирать, просто добавьте их в ваш исходный код!
Все готово для построения собственного интерфейса командной строки!
2. Создайте рабочее пространство
Вначале создайте рабочее пространство. Оно будет хранить информацию о всех ваших аргументах.
ScmdpWorkspace AddWorkspace(char *syntaxHelp, char *description)
Параметры и примеры
syntaxHelp
- Строковый литерал с примером синтаксиса. Оно будет вылезать, если количество введенных аргументов недостаточно или слишком большое.
description
- Строковый литерал с кратким описанием того, что делает ваша программа.
ScmdpWorkspace workspace = AddWorkspace("app [-opt] arg1 arg2", "Test command-line application!")
3. Начните следом добавлять аргументы
После добавления пространства вы можете спокойно добавлять к нему новые аргументы! Можно начать с добавления help-аргумента, он задается отдельно!
void AddHelpArg(ScmdpWorkspace *workspace, char *longKey, char *shortKey)
Параметры и примеры
workspace
- Указатель на созданное рабочее пространство
longKey
- Длинный ключ для вызова помощи
shortKey
- Короткий ключ вызова помощи
AddHelpArg(&workspace, "--help", "-h");
Теперь создадим обязательные (неопциональные) аргументы!
void AddNonOptArg(ScmdpWorkspace *workspace, char *key, char *help, char **valPlace)
Параметры и примеры
workspace
- Указатель на рабочее пространство
key
- Название обязательного аргумента для помощи
help
- Help-сообщение для данного аргумента
valPlace
- Указатель на переменную, куда скидывать результат (он скидывается в виде строкового литерала)
char *arg1;
AddNonOptArg(&workspace, "ARG1", "Necessary argument 1", **arg1);
Теперь, если вам необходимо, добавим опциональные аргументы
Они могут быть как со значением, так и без значения.
По сути, аргументы без значения - это те же аргументы со значением, которое ограничивается True
и False
void AddOptArg(ScmdpWorkspace *workspace, char *longKey, char *shortKey, char *help, char *valName, char **valPlace);
Параметры и примеры
workspace
- Указатель на рабочее пространство
longKey
- Длинный ключ вызова аргумента
shortKey
- Короткий ключ вызова аргумента
help
- Строковый литерал для help-сообщения аргумента
valName
- Строковый литерал для название значения. Используйте ""
для задания аргумента без значения.
valPlace
- Указатель на переменную для сброса результата
char *optArgWithValue;char *optArgWithoutValue;
/* Со значением */AddOptArg(&workspace, "--option1", "-op1", "Optional argument 1 with value", "VALUE", &optArgWithValue);
/* Без значения */AddOptArg(&workspace, "--option2", "-op2", "Optional argument 2 without value", "", &optArgWithoutValue);
4. Распарсите ваши аргументы
Для парсинга всех вызванных аргументов используется функция:
bool ParseArgs(&workspace, argc, argv);
Параметры и примеры
workspace
- Указатель на рабочее пространство
argc
- То же что и argc
в main(int argc, char* argv[])
argv
- То же что и argv[]
в int main(int argc, char* argv[])
Функция возвращает True
в случае успешного парсинга
Или False
в случае ошибки
/* Если парсинг неудачный, очищаем память и выходим из программы */ if (!ParseArgs(&workspace, argc, argv)) return 0;
5. Profit! :)
Примеры
Папка Examples содержит два примера использования scmdp. Хоть они довольно примитивны, но отлично показывают доступный функционал.
Абстрактный пример
Демонстрирует использование опциональных и неопциональных аргументов со значением. Введенные значения отображаются в виде строк в консоли.
Калькулятор
Примитивный калькулятор, позволяющий совершать простые операции (*, /, +, -) с целыми числами.
Результат операции выводится в консоль
Как их запустить?
(UNIX) Компиляция напрямую через GCC
Убедитесь, что компилятор gcc указан в PATH.
Затем откройте Терминал
в папке с исходным кодом примера /src
gcc *.c -I ../inc -o app
./app
Готово! :)
(WINDOWS) Компиляция напрямую через MSVC (cl.exe)
Откройте Developer command prompt
и введите команды ниже друг за другом
cd "путь к папке с примером. пример: C:\Users\User\Desktop\scmdp\examples\abstract\src"
cl *.c /I ../inc /Feapp.exe
app
Готово! :)
Кросс-платформенная сборка через CMake
Откройте Терминал
в корневой папке примера, который хотите собрать
Затем просто введите команды:
mkdir build
cd ./build
cmake ../
cmake --build ./
./app (или без ./ на WINDOWS)
Готово! :)
Описание
Простой парсер аргументов командной строки на чистом C
Языки
C