Frameworks CLI para C++: como criar um aplicativo de console do zero

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

CLI frameworks para C++: da análise de argumentos a utilitários de console completos



O desenvolvimento de utilitários de console em C++ é uma das tarefas mais comuns que os programadores enfrentam. Seja uma ferramenta de processamento de dados, um compilador ou um script DevOps — não é possível prescindir de uma análise competente dos argumentos da linha de comando. O tratamento manual de argc/argv rapidamente se transforma em um emaranhado de strcmp e atoi, e a manutenção de opções, flags e subcomandos se torna um pesadelo. É aqui que os CLI frameworks vêm em socorro — bibliotecas que assumem toda a rotina: descrição declarativa da interface, geração de ajuda, validação de tipos e até mesmo autocompletar para o shell.



Neste artigo, veremos três soluções mais populares para C++: CLI11, cxxopts e docopt.cpp. Você aprenderá como criar rapidamente um aplicativo de console profissional com o mínimo de esforço.



1. CLI11 — o padrão moderno



CLI11 (GitHub: CLIUtils/CLI11) é uma biblioteca header-only para C++11/14/17. É considerada o padrão ouro devido à sua API concisa e recursos poderosos: suporte a subcomandos aninhados, validação de intervalos, opções com múltiplos valores, flags, argumentos posicionais e geração automática de --help.



Instalação

Basta copiar o arquivo de cabeçalho CLI11.hpp para o projeto ou conectá-lo via CMake FetchContent.



Exemplo: utilitário de arquivamento com opções

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

int main(int argc, char** argv) { CLI::App app("Arquivador simples");

std::string input_file; std::string output_file = "archive.zip"; int compression_level = 5; bool verbose = false;

app.add_option("-i,--input", input_file, "Arquivo de entrada")->required(); app.add_option("-o,--output", output_file, "Arquivo de saída"); app.add_option("-c,--compression", compression_level, "Nível de compressão (1-9)") ->check(CLI::Range(1, 9)); app.add_flag("-v,--verbose", verbose, "Saída detalhada");

CLI11_PARSE(app, argc, argv);

std::cout << "Arquivando: " << input_file << ""; std::cout << "Saída: " << output_file << ""; std::cout << "Nível: " << compression_level << ""; if (verbose) std::cout << "Modo de depuração ativado"; return 0;}


Execução: ./archiver -i data.txt -o backup.zip -c 9 -v
Em caso de erro ou --help, o CLI11 exibirá automaticamente uma bela descrição.



2. cxxopts — leveza e simplicidade



cxxopts (GitHub: jarro2783/cxxopts) é outra biblioteca header-only. É mais simples que o CLI11, mas cobre 90% das necessidades: opções curtas/longas, valores padrão, listas e help. Ideal para utilitários pequenos.



Exemplo: leitura de configuração

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

int main(int argc, char* argv[]) { cxxopts::Options options("greeter", "Programa de boas-vindas");

options.add_options() ("n,name", "Nome do usuário", cxxopts::value<std::string>()) ("a,age", "Idade", cxxopts::value<int>()->default_value("0")) ("v,verbose", "Saída detalhada", cxxopts::value<bool>()->default_value("false")) ("h,help", "Ajuda");

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

if (result.count("help")) { std::cout << options.help() << ""; return 0; }

std::string name = result["name"].as<std::string>(); int age = result["age"].as<int>(); bool verbose = result["verbose"].as<bool>();

std::cout << "Olá, " << name << "!"; if (verbose) std::cout << "Ida

Recommendations