Gerenciamento de pacotes

Como visto, o processo de compilação passa por diferentes estágios até a criação de um arquivo executável. A separação de funções, variáveis, constantes e outras entidades em artefatos (arquivos .hpp, .a, .so etc...) possibilita o compartilhamento de código.

Por exemplo, se um programador A cria um módulo de um software escrito em C++ que é capaz de criar uma janela (interface gráfica), esse mesmo módulo pode ser utilizado por um programador B em outro projeto, desde que o programador A tenha utilizado alguma das ferramentas apresentadas nessa seção.

Uma possibilidade, seria de o programador A ter criado uma biblioteca estática e prover esses arquivos binários e os arquivos .hpp associados para o programador B. Dessa forma, o programador A pode criar um pacote, contendo a biblioteca que pode ser enviado ao programador B, e que contém todos os arquivos necessários para que o programador B possa criar seus programas.

Alguns exemplos de bibliotecas incluem: Qt (criação de programas com interface gráfica), Boost (contém várias funções auxiliares), GoogleTest (automatização de testes), entre muitas outras.

O problema é que, em geral, para gerenciar e utilizar essas bibliotecas, normalmente o programador precisa ter algum conhecimento específico da biblioteca (normalmente obtém-se o conhecimento por meio da leitura dos manuais de cada uma delas). Uma alternativa interessante para utilizar as bibliotecas é o uso do software CMake, abordado em outra seção desse livro.

Um segundo problema que ocorre é que é possível que as bibliotecas tenham sido criadas utilizando outras bibliotecas. Essa sequência de dependências pode ocasionar em problemas de compilação e execução que são dificeis de se lidar. Daí vem a necessidade de um gerenciador de pacotes. Gerenciadores de pacote são ferramentas que auxiliam no processo de download, automatizam o processo de instalação, e cuidam das dependências entre os pacotes e o seu programa.

O intuito dessa seção não é fazer propaganda nem ensinar uma ferramenta específica. Ao invés disso, apenas apontam-se os problemas e algumas possíveis ferramentas que podem ser utilizadas para resolve-los, que incluem:

  • Conan
  • Conda
  • apt - Advanced Package Tool
  • vcpkg