Qual é a melhor maneira de organizar o código do meu projeto C e suas bibliotecas externas?[fechado]

StackOverflow https://stackoverflow.com/questions/26964

  •  09-06-2019
  •  | 
  •  

Pergunta

Estou iniciando um novo projeto C, que é amplamente baseado em OSS.Também estará no SourceForge e gostaria de aproveitar esta oportunidade para aprender as melhores práticas estabelecidas para organizar esse tipo de código.Estou usando bibliotecas como libcurl e libz e vou compilá-las usando MinGW e MSYS.

Estarei distribuindo cópias do código-fonte de todas as bibliotecas que estou usando em meu projeto, para que as pessoas que baixam o código-fonte não tenham que bicar e procurar dependências.Como devo chamar o diretório em que armazeno as bibliotecas?Até agora, hesito entre:

  • lib, porque são bibliotecas.No entanto, 'lib' tem uma conotação diferente no mundo UNIX.
  • src, porque são arquivos de origem.
  • Terceiros, porque não fui eu que escrevi.

E para onde devo compilar essas bibliotecas?Devo simplesmente configurá-los e instalá-los na raiz do sistema ou devo configurar um diretório onde todas as bibliotecas devem ser compiladas e vinculadas a partir daí?Obviamente, isso terá ramificações para o meu Makefile.

Como devo fazer isso?Existem convenções estabelecidas que devo seguir?Eles estão escritos em algum lugar?

Foi útil?

Solução

Primeiro, para bibliotecas externas eu usaria vendor, mas isso é apenas uma preferência.

Em segundo lugar, não acho que seja uma boa ideia instalar outro bibliotecas na raiz do sistema, sem o conhecimento dos usuários.Mais importante ainda, porque isso entrará em conflito com versões instaladas posteriormente dessas bibliotecas.Então acho que o melhor lugar para essas bibliotecas seria no mesmo diretório da sua aplicação.

Você também pode compilar estaticamente essas bibliotecas em seu programa.

Outras dicas

Em um trabalho anterior, o padrão era instalá-los em um diretório chamado 3rdparty e construir as bibliotecas ali mesmo (em 3rdparty/LIBNAME/Debug, etc.).

Usamos algo com o sufixo _ext ou _EXT (ou seja, MyProject_EXT) para significar que é externo ao nosso projeto armazenar o código-fonte dos pacotes externos aos quais vinculamos.

Eu concordo com Pedro.As bibliotecas externas não devem ser incorporadas na raiz do sistema, pois podem causar conflitos.Eu os construiria em seu diretório e, em seguida, os instalaria em um diretório /lib (ou talvez /extlib) exclusivo para seu aplicativo e vincularia a eles lá.

Por favor não envie fontes de terceiros com seu código, seja na fonte ou vinculado estaticamente aos binários, ou de qualquer outra forma.Isso apenas interferirá em outras cópias do mesmo e não será atualizado quando a biblioteca precisar de conserto.Informe ao usuário quais são os requisitos (e acompanhe as alterações da API na biblioteca!).Um usuário autocompilação garantirá as dependências, uma distribuição garantirá que seu pacote funcione com a versão que eles enviam.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top