Framework CLI para C++: cppcli — criação de aplicações de console

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Framework CLI para C++: cppcli — criação de aplicações de console poderosas



O desenvolvimento de interfaces de console (CLI) em C++ frequentemente requer análise manual de argumentos, processamento de flags e organização de comandos. A biblioteca cppcli fornece um framework pronto para a criação rápida de aplicações CLI profissionais. Ela permite que você se concentre na lógica de negócios, e não na infraestrutura de entrada/saída. Neste artigo, vamos explorar os principais recursos do cppcli, fornecer exemplos de código e mostrar como integrá-lo ao seu projeto.



Principais recursos do cppcli



  • Definição declarativa de comandos — cada comando é descrito como uma classe separada ou função lambda.
  • Análise automática de argumentos — suporte para argumentos posicionais, nomeados e flags.
  • Saída colorida e formatação — utilitários integrados para saída estilizada (cores ANSI, tabelas, barras de progresso).
  • Validação e ajuda — geração automática de mensagens de ajuda e verificação de argumentos obrigatórios.
  • Extensibilidade — suporte para tipos de argumentos personalizados e middleware.


Início rápido: instalação e primeiro exemplo



O cppcli é distribuído como uma biblioteca header-only. Para instalar, clone o repositório ou use CMake FetchContent. Inclusão no projeto:



#include <cppcli/cli.h>#include <iostream>

int main(int argc, char* argv[]) { cppcli::App app("Minha aplicação", "1.0.0"); app.run(argc, argv); return 0;}


Esta é a estrutura mínima. Agora vamos adicionar o comando greet, que recebe o nome do usuário.



Exemplo: comando com argumentos



#include <cppcli/cli.h>

int main(int argc, char* argv[]) { cppcli::App app("Greeter", "1.0.0");

app.command("greet", "Sauda o usuário") .argument<std::string>("name", "Nome do usuário") .action([](const cppcli::Args& args) { std::string name = args.get<std::string>("name"); std::cout << "Olá, " << name << "!"; });

app.run(argc, argv); return 0;}


Execução: ./app greet João exibirá Olá, João!. Se o argumento não for fornecido, o cppcli exibirá um erro e a ajuda.



Flags e parâmetros opcionais



Vamos adicionar a flag --formal para uma saudação formal:



app.command("greet", "Sauda o usuário")    .argument<std::string>("name", "Nome")    .flag("--formal", "-f", "Saudação formal")    .action([](const cppcli::Args& args) {        std::string name = args.get<std::string>("name");        bool formal = args.get<bool>("formal");        if (formal)            std::cout << "Olá, " << name << "!";        else            std::cout << "Oi, " << name << "!";    });


Agora ./app greet João --formal exibirá Olá, João!.



Comandos aninhados e subcomandos



O cppcli suporta uma estrutura de comandos em árvore. Por exemplo, para um utilitário de gerenciamento de projetos:



app.command("project", "Gerenciamento de projetos")    .command("create", "Criar projeto")        .argument<std::string>("name", "Nome do projeto")        .action([](const cppcli::Args& args) {            std::cout << "Projeto criado: " << args.get<std::string>("name") << "";        })    .command("delete", "Excluir projeto")        .argument<std::string>("name", "Nome do projeto")        .flag("--force", "Sem confirmação")        .action([](const cppcli::Args& args) {            // lógica de exclusão        });


Chamada: ./app project

Recommendations