Eu tenho um projeto que usa 3-4 diferentes bibliotecas C / C ++ de código aberto.
Criei essas bibliotecas para várias plataformas e registrei arquivos e bibliotecas estáticas para diferentes plataformas no meu projeto.
No entanto, luto com alguns problemas. Todos esses projetos estão relacionados ao gerenciamento de dependências. E estou procurando conselhos de melhores práticas.
1) Como sei exatamente o que uso?
Não tenho como obter uma versão de uma biblioteca estática. Como resultado, preciso rastrear qual versão da lib estática estou usando (pode ser SHA de uma confirmação a partir da qual ela foi criada)?
Isso é especialmente importante quando preciso descobrir quando atualizar essas bibliotecas.
2) Como reproduzo a compilação?
Eu poderia ter lutado para criar alguma biblioteca específica para uma plataforma específica. Demorei um pouco para descobrir.
A próxima vez em que precisarei criar a mesma biblioteca poderá ser em meio ano (quando precisarei atualizar por qualquer motivo. No entanto, nessa época, não vou me lembrar de nada e de um ambiente no qual ela foi construída. já se foi há muito tempo.
3) Devo bifurcar essas bibliotecas para ter uma cópia do código fonte?
Esta é uma preocupação menor. No entanto, ainda é uma preocupação. É bom garantir que as compilações sejam reproduzíveis (e isso requer código-fonte).
fonte
Se os arquivos de inclusão ou libs ainda não contêm um número de versão, adicione um arquivo de texto "version.txt" (contendo o número da versão) a cada pasta lib e verifique-o no seu VCS, juntamente com os arquivos lib e include . No entanto, se você versão da fonte completa da lib (ponto 3), as chances são altas, já existe um arquivo de código fonte contendo o número da versão, portanto, não há necessidade de manter a sua própria para este caso.
Tente automatizar o máximo que puder. Use scripts, makefiles ou arquivos de suas ferramentas de construção favoritas. Coloque tudo isso sob controle de origem. Se houver etapas manuais necessárias, anote os detalhes em um arquivo de texto (por exemplo, readme_build.txt) e coloque-o sob controle de origem.
Você deve ter uma cópia do código-fonte , mas faça uma bifurcação apenas se necessário (por exemplo, se você tropeçar em um bug urgente e o autor original não puder corrigi-lo dentro das restrições de tempo). Ou, se os autores usarem um ambiente de compilador diferente do seu e for necessário fazer algumas alterações para que a lib funcione em seu ambiente. No entanto, esteja ciente de que cada alteração no código-fonte original no seu fork provavelmente dificulta a integração de atualizações posteriormente.
No entanto, eu recomendo obter uma cópia do código fonte original (não desbloqueado) das bibliotecas que você está usando. Isso permitirá que você bifurque ou mantenha a lib posteriormente, se necessário, mesmo que o mantenedor original decida revogar as fontes da lib da Web pública.
fonte