C++ Cpp

A modularização do projeto é um tema muito difícil de explicar, vai depender do ambiente de trabalho, tamanho da equipe, metodologia de desenvolvimento e por fim, o código.

Descobrir a melhor forma de dividir o projeto é um desafio e tanto, porque essa divisão pode ser demais afetando a produtividade dos desenvolvedores ou menos, que dificulta o aprendizado devido a quantidade de arquivos e códigos em um único projeto.

Git SubModule

Git SubModule facilita o controle de versão de módulos no repositório do seu projeto.

Ou seja, qualquer projeto que esteja em um repositório Git é passível de ser um modulo do seu projeto. Exemplo, vamos dizer que seu projeto depende da biblioteca Boost, você pode acessar via linha de comando a pasta que está seu projeto e executar o comando git submodule add https://github.com/boostorg/boost.git, pronto você terá a boost como um modulo do seu projeto, sem precisar acessar o site da boost, baixar e compilar o projeto.

O exemplo acima foi com uma biblioteca de terceiro, mas nada impede você de trabalhar com bibliotecas internas (módulos do projeto).

Vantagens

  • Cada módulo do seu projeto terá seu repositório com seus respectivos branches/tags.
  • Você pode controlar no projeto principal qual versão (commit/branch/tag) você deseja daquele módulo.
  • Consegue atribuir responsabilidade de módulo por recurso (desenvolvedor/líder), sem afetar o projeto principal.

Exemplo

Criei um projeto chamado “main” – https://github.com/fegomes/main, meu objetivo é criar um executável que imprima uma frase de outro projeto.

Após isso, criei outro projeto chamado “libhello” – https://github.com/fegomes/libhello, que é uma biblioteca estática com uma classe chamada Hello e o método “to_string” que retorna a mensagem “Hello World!”.

A criação da biblioteca estática não teve segredo, mas a criação do executável main, tive que fazer algumas configurações, tanto no CMakeLists.txt tanto no repositório git.

Para começar criei uma pasta “third_library” e dentro dela executei o comando: git submodule add https://github.com/fegomes/libhello, com isso foi criado uma referência ao projeto “libhello”.

Após isso modifiquei meu CMakeLists.txt para ter acesso a nova biblioteca importada, conforme abaixo:

[code language=”cpp”]
// main/CMakeLists.txt
include_directories(third_party)

add_subdirectory(third_party)

link_directories(third_party/libhello/lib)
[/code]

como adicionei um sub diretório no meu CMakeLists.txt tive que criar um novo CMakeLists.txt na pasta third_library, conforme abaixo:

[code language=”cpp”]
// main/third_library/CMakeLists.txt
add_subdirectory(libhello)
[/code]

Com isso, basta compilar o projeto main que o projeto libhello será compilado também.

Dicas

Caso queira baixar o projeto “main”, após executar o clone dele, execute o comando “git submodule update –init –recursive”.

Tem alguma dúvida ou sugestão, deixe nos comentários!

Deixe um comentário

CATEGORIA

C++, git

Tags

, , , , , , , , ,