Digamos que eu tenha um projeto C ++ dividido em vários subprojetos. Todos os subprojetos produzem uma DLL e diferentes equipes de desenvolvedores trabalham em cada um dos subprojetos. Agora, se eu quiser construir o projeto principal, há uma maneira de evitar ter que construir todos os subprojetos sozinho?
Resumindo, estou procurando algo que faça o gerenciamento de dependências (ou seja, para arquivos binários e cabeçalhos) de maneira semelhante ao que o Maven faz para Java.
Na verdade, eu tentei usar o Maven para isso, mas isso é um pouco complicado porque tenho que criar os pacotes manualmente e com bastante frequência, o Maven deixa de selecionar as alterações mais recentes. Além disso, executar a compilação é um pouco complicado, pois tenho que chamar o NAnt de dentro do Maven (eu uso o recurso do NAnt para construir soluções do Visual Studio diretamente).
Alguma dica e ideia de como fazer isso?
fonte
maven
, está perdendo o ponto principalmaven
, ou 10 anos atrás, quando eu não estava usandomaven
para C ++, era muito menos útil para C ++. Não posso falar sobre 2009, mas nos últimos anos, por experiência,maven
é exatamente o que você usaria para o problema que está descrevendo. Ele faz exatamente o que você quer, de forma bastante eficiente e bem, e não faz as coisas negativas que você afirma que faz. Qualquer pessoa que ler isso em 2019 ou posteriormente deve considerar o usomaven
para essa finalidade.Respostas:
Resposta inicial : Eu sugeriria o uso do CMake. É um gerador de arquivos multiplataforma (também gera projetos Visual Studio ou Eclipse CDT).
http://www.cmake.org/
Eu fiz uma experiência muito boa com isso. A melhor coisa que gosto nisso é a capacidade de produzir uma estrutura de projeto genérica. Portanto, você pode incluir genericamente a pesquisa de subprojetos para testes de unidade, etc., sem alterar o script todas as vezes.
Eles também têm muitos módulos sobre como encontrar bibliotecas de compilação pré-instaladas, necessárias para o projeto (como Boost, QT etc.)
Atualização : nesse meio tempo, houve algum esforço para introduzir o gerenciamento de pacotes para C ++. Alguns projetos que vale a pena conferir:
Nota, conforme apontado por @RAM nos comentários, cpm não é mais mantido ativamente.
fonte
Para o gerenciamento de dependências, existe um novo projeto (é uma empresa startup) que está implementando este tipo de ferramenta: https://github.com/biicode (um gerenciador de dependências C ++). Você pode adicionar suas dependências e deve funcionar.
Atualmente, o nome do projeto é conan.io , eles foram adquiridos pela JFrog .
ATUALIZAÇÃO: O projeto está morto ... Infelizmente, parece que a inicialização não conseguiu clientes pagantes premium suficientes, mas o servidor parece estar funcionando bem ...
ATUALIZAÇÃO2: Parece que existe um projeto substituto: conan.io (obrigado @mucaho)
fonte
Eu recomendo os seguintes sistemas de construção de alto nível:
fonte
Se você quer apenas gerenciamento de dependências, experimente o Ivy , ele se integra perfeitamente ao Ant (e eu suponho que o NAnt possa fazer o mesmo com base neste blog , que tem um link do site do Ivy).
Também existe o Byldan , uma versão .Net do Maven. Não sei se isso funcionará bem para você.
fonte
Make e GCC são uma ótima combinação para uma verificação de dependência realmente boa.
O GCC pode gerar arquivos de dependência 'make' automaticamente (opção de linha de comando -MD), de modo a ser capaz de reconstruir todos os arquivos de origem que dependem de um determinado cabeçalho, por exemplo.
Eu tenho algumas regras simples que recorte e colo em meus makefiles:
Agora, se seus arquivos objeto são declarados em uma lista OBJ_C e OBJ_CPP:
O Make pode, é claro, rastrear dependências com outros projetos e outros, por exemplo, reconstruindo uma biblioteca compartilhada conforme necessário.
Por exemplo, se suas outras equipes sempre colocam suas DLLs mais recentes em alguma pasta compartilhada:
fonte
${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@
Tive dificuldade em analisar todos esses símbolos de Make, parece que isso resolve para algo comog++ -c main.cc -MD -MF test
se você deseja executá-lo autônomo na linha de comando e coloca os resultados em um arquivo chamado 'teste'.Editar:
Biicode está obsoleto
Alternativa: Conan.io
fonte
Eu recomendo o conan , que eu estava usando atualmente. É muito poderoso manter todas as bibliotecas e binários dependentes em seu projeto.
fonte
Você pode criar o pacote NuGet para bibliotecas usadas e usar o NuGet para gerenciamento de dependências.
Veja também, NuGet para C ++
fonte
Há uma série de ferramentas no topo do SCons, fornecendo funcionalidade de nível superior semelhante à do Autotools que estão tentando tornar a vida do desenvolvedor mais fácil (por exemplo, WAF, SNOCS). Infelizmente, o próprio SCons tem a maior desvantagem - maior tempo de compilação para grandes projetos.
Recomendo experimentar SNOCS (que é um SCons invertido) para aqueles que procuram um gerenciamento de dependência fácil e escolhem opções de compilação em um único comando (compilador, x86 / x64, Debug / Release, bibliotecas estáticas / compartilhadas, teste / instalar alvos, etc.).
SNOCS também tenta resolver o problema de longo tempo de compilação, armazenando a saída de configuração do projeto em arquivos separados, o que permite que as compilações subsequentes ignorem a fase de configuração e vão direto para a fase de construção (o último recurso está em construção agora)
A configuração do CMake se torna tediosa em soluções maiores, então a manutenção do sistema de construção leva uma grande fração do tempo do desenvolvedor. Felizmente como o Martijn já mencionou, existe o biicode que "usa o CMake para gerar seu projeto com suas dependências".
fonte
Experimente SCons
SCons é uma ferramenta de construção de software de código aberto - ou seja, uma ferramenta de construção de última geração. Pense no SCons como um substituto de plataforma cruzada aprimorado para o utilitário Make clássico com funcionalidade integrada semelhante ao autoconf / automake e caches de compilador como o ccache. Resumindo, o SCons é uma maneira mais fácil, confiável e rápida de criar software.
fonte
Eu recomendo usar a mãe de todos os sistemas de dependência de construção: make.
fonte
Experimente scons, você ficará viciado. Make é desatualizado, difícil e caro de manter.
fonte