CLI фреймворк для C++: cppcli — создание мощных консольных приложений
Разработка консольных интерфейсов (CLI) на C++ часто требует ручного парсинга аргументов, обработки флагов и организации команд. Библиотека cppcli предоставляет готовый фреймворк для быстрого создания профессиональных CLI-приложений. Она позволяет сосредоточиться на бизнес-логике, а не на инфраструктуре ввода-вывода. В этой статье мы разберём ключевые возможности cppcli, приведём примеры кода и покажем, как интегрировать её в ваш проект.
Основные возможности cppcli
- Декларативное определение команд — каждая команда описывается как отдельный класс или лямбда-функция.
- Автоматический парсинг аргументов — поддержка позиционных, именованных аргументов и флагов.
- Цветной вывод и форматирование — встроенные утилиты для styled output (ANSI-цвета, таблицы, прогресс-бары).
- Валидация и справка — автоматическая генерация help-сообщений и проверка обязательных аргументов.
- Расширяемость — поддержка пользовательских типов аргументов и middleware.
Быстрый старт: установка и первый пример
cppcli распространяется как header-only библиотека. Для установки склонируйте репозиторий или используйте CMake FetchContent. Подключение в проект:
#include <cppcli/cli.h>
#include <iostream>
int main(int argc, char* argv[]) {
cppcli::App app("Моё приложение", "1.0.0");
app.run(argc, argv);
return 0;
}
Это минимальный каркас. Теперь добавим команду greet, которая принимает имя пользователя.
Пример: команда с аргументами
#include <cppcli/cli.h>
int main(int argc, char* argv[]) {
cppcli::App app("Greeter", "1.0.0");
app.command("greet", "Приветствует пользователя")
.argument<std::string>("name", "Имя пользователя")
.action([](const cppcli::Args& args) {
std::string name = args.get<std::string>("name");
std::cout << "Привет, " << name << "!\n";
});
app.run(argc, argv);
return 0;
}
Запуск: ./app greet Иван выведет Привет, Иван!. Если аргумент не указан, cppcli выведет ошибку и справку.
Флаги и опциональные параметры
Добавим флаг --formal для формального приветствия:
app.command("greet", "Приветствует пользователя")
.argument<std::string>("name", "Имя")
.flag("--formal", "-f", "Формальное приветствие")
.action([](const cppcli::Args& args) {
std::string name = args.get<std::string>("name");
bool formal = args.get<bool>("formal");
if (formal)
std::cout << "Здравствуйте, " << name << "!\n";
else
std::cout << "Привет, " << name << "!\n";
});
Теперь ./app greet Иван --formal выведет Здравствуйте, Иван!.
Вложенные команды и подкоманды
cppcli поддерживает древовидную структуру команд. Например, для утилиты управления проектами:
app.command("project", "Управление проектами")
.command("create", "Создать проект")
.argument<std::string>("name", "Имя проекта")
.action([](const cppcli::Args& args) {
std::cout << "Создан проект: " << args.get<std::string>("name") << "\n";
})
.command("delete", "Удалить проект")
.argument<std::string>("name", "Имя проекта")
.flag("--force", "Без подтверждения")
.action([](const cppcli::Args& args) {
// логика удаления
});
Вызов: ./app project create myapp.
Продвинутые возможности: кастомные валидаторы и middleware
Также в библиотеке
Реактивное программирование в Kotlin: библиотека RxKotlin и корутины
Clikt: Мощный CLI фреймворк для Kotlin с декларативным синтаксисом
Стандартная библиотека Java: полный обзор | Пакеты java.lang, java.util, java.io
Отправка email на Go: полное руководство по библиотекам и инструментам
Kivy – кроссплатформенная разработка GUI
Рекомендаций
Также в библиотеке
Реактивное программирование в Kotlin: библиотека RxKotlin и корутины
Clikt: Мощный CLI фреймворк для Kotlin с декларативным синтаксисом
Отправка email на Go: полное руководство по библиотекам и инструментам