Frameworks CLI para C++: escrevendo aplicações de console de forma rápida e conveniente

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

Frameworks CLI para C++: escrevendo aplicações de console de forma rápida e conveniente



Criar uma interface de linha de comando (CLI) de qualidade é uma parte importante do desenvolvimento em C++. A análise manual de argumentos através de argc/argv e getopt rapidamente se torna complicada e propensa a erros, especialmente com um grande número de opções. Bibliotecas especializadas — frameworks CLI — vêm em socorro. Elas automatizam o parsing, a geração de ajuda, a verificação de tipos e ajudam a escrever um código mais limpo e sustentável.



Neste artigo, veremos os três frameworks CLI mais populares e modernos para C++: CLI11, cxxopts e argparse. Você conhecerá seus pontos fortes, verá exemplos de código e poderá escolher a ferramenta adequada para o seu projeto.



1. CLI11 — o padrão moderno



CLI11 é uma biblioteca header-only que é justamente considerada uma das melhores soluções para C++11 e versões posteriores. Ela oferece uma API intuitiva, validação poderosa e geração automática de ajuda.



Principais recursos:

  • Header-only: não requer compilação — basta incluir o arquivo de cabeçalho.
  • Ajuda automática: as flags -h e --help funcionam imediatamente.
  • Validação: validadores internos e personalizados para argumentos (intervalo, expressão regular, existência de arquivo).
  • Suporte a subcomandos: ideal para utilitários complexos (como git ou docker).
  • Formatação: saída de ajuda personalizável.


Exemplo de uso do CLI11:

Uma aplicação simples que aceita um nome e uma flag opcional de saudação:

#include <CLI/CLI.hpp>#include <iostream>

int main(int argc, char** argv) { CLI::App app{"Demonstração CLI11"};

std::string name; bool greet = false;

app.add_option("-n,--name", name, "Seu nome")->required(); app.add_flag("-g,--greet", greet, "Exibir saudação");

CLI11_PARSE(app, argc, argv);

std::cout << "Olá, " << name << "!" << std::endl; if (greet) { std::cout << "Tenha um bom dia!" << std::endl; } return 0;}

Como funciona: A biblioteca analisa os argumentos, verifica a obrigatoriedade da opção --name e gera a ajuda ao chamar ./app --help.



2. cxxopts — simplicidade e leveza



cxxopts é outra biblioteca header-only, focada em minimalismo e simplicidade. Ela é perfeita para pequenos utilitários onde subcomandos não são necessários, mas a legibilidade do código é importante.



Principais recursos:

  • API simples: adição de opções através de chamadas encadeadas.
  • Conversão automática de tipos: int, double, string e outros.
  • Suporte a argumentos posicionais.
  • Prefixos personalizáveis: pode usar - ou --.


Exemplo de uso do cxxopts:

#include <cxxopts.hpp>#include <iostream>

int main(int argc, char** argv) { cxxopts::Options options("myapp", "Exemplo cxxopts");

options.add_options() ("f,file", "Nome do arquivo", cxxopts::value<std::string>()) ("v,verbose", "Saída detalhada", cxxopts::value<bool>()->default_value("false")) ("h,help", "Mostrar ajuda");

auto result = options.parse(argc, argv);

if (result.count("help")) { std::cout << options.help() << std::endl;

Recommendations