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
-he--helpfuncionam 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
gitoudocker). - 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,stringe 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; Também na biblioteca
Trabalhando com arquivos ZIP em C# (.NET): guia completo
Trabalhando com Markdown em Go (Golang): bibliotecas, parsing e conversão
Trabalhando com arquivos ZIP em C# (.NET): guia completo