Compilação da Biblioteca Boost 1.69.0 no Windows
Download do Boost 1.69.0
Baixe o arquivo boost_1_69_0.zip do site oficial do Boost. Extraia o conteúdo para um diretório de sua escolha, por exemplo, E:\fonte\boost_1_69_0.
Compilação do Boost 1.69.0
No diretório extraído, execute o script bootstrap.bat. Isso gerará a ferramenta de build bjam.exe no mesmo local.
Para compilar uma biblioteca específica, como program_options, utilize o comando a seguir. Este exemplo configura uma compilação estática para 32 bits:
bjam install --prefix="D:\libs\boost" debug release link=static runtime-link=static threading=multi address-model=32 --with-program_options
Parâmetros detalhados:
--prefix: Define o caminho de instalação para as bibliotecas geradas.debug release: Compila tanto a versão de depuração quanto a de lançamento.link=static: Gera bibliotecas estáticas. Utilizesharedpara bibliotecas dinâmicas.runtime-link=static: Realiza vínculo estático com as bibliotecas de tempo de execução do C/C++.threading=multi: Ativa a compilação para múltiplas threads. Usesinglepara single-thread.address-model=32: Especifica a arquitetura alvo de 32 bits. Substitua por64para 64 bits.--with-program_options: Indica qual subbiblioteca compilar. Modifique este parâmetro de acordo com suas necessidades.
Observação: Compilar apenas as bibliotecas estritamente necessárias reduz significativamente o tempo do prcoesso.
Após a execução bem-sucedida, os artefatos compilados serão copiados para o diretório definido em --prefix.
Utilizando a Biblioteca Boost.ProgramOptions
Configuração com CMake
Crie um arquivo CMakeLists.txt com a seguinte configuração:
cmake_minimum_required(VERSION 3.10)
projeto(ExemploBoost)
encontrar_pacote(Boost COMPONENTS program_options REQUIRED)
incluir_diretorios(${Boost_INCLUDE_DIRS})
vincular_diretorios(${Boost_LIBRARY_DIRS})
arquivo(GLOB ARQUIVOS_FONTE *.cpp)
adicionar_executavel(${PROJECT_NAME} ${ARQUIVOS_FONTE})
A chamada encontrar_pacote() localiza o Boost e importa o módulo program_options. As diretivas subsequentes configuram os caminhos de inclusão e vinculação para o compilador e o linker.
Exemplo de Código em C++
Implemente um arquivo main.cpp conforme o exemplo abaixo:
#include <boost/program_options.hpp>
namespace opcoes = boost::program_options;
#include <iostream>
using namespace std;
int main(int num_args, char** argumentos)
{
int fator_compactacao = -1;
opcoes::options_description configuracoes("Opções disponíveis");
configuracoes.add_options()
("ajuda,a", "Exibe informações de uso")
("compactacao,k", opcoes::value<int>(&fator_compactacao)->default_value(10), "Ajusta o nível de compactação");
opcoes::variables_map mapa_valores;
try
{
opcoes::store(opcoes::parse_command_line(num_args, argumentos, configuracoes), mapa_valores);
opcoes::notify(mapa_valores);
if (mapa_valores.count("ajuda"))
{
cout << configuracoes << endl;
return 0;
}
if (mapa_valores.count("compactacao"))
{
cout << "Nível de compactação configurado: " << fator_compactacao << endl;
}
else
{
cout << "Nível de compactação não especificado." << endl;
}
}
catch (std::exception& erro)
{
std::cout << erro.what() << std::endl;
return 1;
}
return 0;
}
No fragmento, opcoes::value<int>(&fator_compactacao) associa o argumento da linha de comando à variável fator_compactacao. A função default_value(10) estabelece um valor padrão; se omitida, o parâmetro torna-se obrigatório.