Alguma boa ferramenta de construção para um projeto C++, que possa substituir o make?
-
09-06-2019 - |
Pergunta
Estou me perguntando se existe alguma ferramenta legal e elegante para substituir o GNU Autotools ou Make para construir um projeto C++ muito grande, que é algo muito complicado de usar.
É simples gerar todos os arquivos que o Autotools exige se o projeto for pequeno, mas se o código fonte estiver dividido em vários diretórios, com múltiplas bibliotecas de terceiros e muitas dependências, você cai no "Inferno do Autotools".
obrigado por qualquer recomendação
Solução
O Mecanismo JavaScript do Google V8 é escrito em C++ e usa SCons, então acho que é um voto a favor.
Outras dicas
Dê uma olhada waf.
Acho que você pode considerá-lo um substituto completo para marcas e ferramentas automáticas.É baseado em python.Uma coisa que gosto no waf é que o script waf em si é independente de aproximadamente 100kb e você coloca no diretório raiz do projeto.Isso contrasta com make ou rake and friends, onde o sistema de compilação deve ser instalado primeiro.Você precisa ter o python >=2.3 instalado.
~$ ./waf configure && ./waf && ./waf install
O equivalente do Waf aos Makefiles é o arquivo wscript.É um script python que o waf lê e define pelo menos 3 funções: set_options()
, configure(conf)
e build(bld)
.Você pode adivinhar o que cada um deles faz.
Para começar, recomendo procurar os arquivos demos/cpp/* na distribuição fonte.Dê também uma olhada no documento/waf.pdf arquivo;é um documento de 12 páginas que o colocará em funcionamento rapidamente.
Para uma comparação da velocidade de várias ferramentas de construção C++, você pode dar uma olhada neste benchmark:http://retropaganda.info/~bohan/devel/wonderbuild/benchmarks/time.xml
Usamos Jam para um projeto C++ complexo - um benefício é que ele é bem multiplataforma.Em vez de eu divulgar os benefícios, basta dar uma olhada rápida neste link:http://www.perforce.com/jam/jam.html
Noel Llopis escreveu alguns artigos comparando sistemas de construção.A Parte 1 de "A Busca pelo Sistema de Construção Perfeito" está em http://gamesfromwithin.com/the-quest-for-the-perfect-build-system.A parte 2 segue no mesmo site.Uma nova tentativa de Scons é relatada em http://gamesfromwithin.com/?p=104.
Conclusões:SCons é muito lento ...Jam é o vencedor.
Cook é outra ferramenta que pode ser usada para substituir o make.Já vi várias grandes empresas usando-o.Portanto, está pronto para uso empresarial, embora o site pareça um tanto desatualizado.
Estou usando SCons em um grande projeto c++ (no Linux e no Windows) e funciona muito bem.
scons all -j8
(que compila arquivos objeto em paralelo) é muito legal!
eu uso arquivo assado pelo meu processo de construção e me tornei um grande fã!
Eu nunca mais preciso escrever um Makefile, muito menos scripts horríveis de autotools GNU.Tudo o que tenho que fazer é fornecer um XML
arquivo que descreve os destinos de construção.Bakefile pode converter isso em um Makefile que acerta todas as dependências (arquivo de cabeçalho), etc., onde diferentes formatos de Makefile podem ser escolhidos (colando a lista da documentação):
available formats are:
autoconf GNU autoconf Makefile.in files
borland Borland C/C++ makefiles
dmars Digital Mars makefiles
dmars_smake Digital Mars makefiles for SMAKE
gnu GNU toolchain makefiles (Unix)
mingw MinGW makefiles (mingw32-make)
msevc4prj MS eMbedded Visual C++ 4 project files
msvc MS Visual C++ nmake makefiles
msvc6prj MS Visual C++ 6.0 project files
msvs2003prj MS Visual Studio 2003 project files
msvs2005prj MS Visual Studio 2005 project files
symbian Symbian development files
watcom OpenWatcom makefiles
xcode2 Xcode 2.4 project files
Eu costumo usar o autoconf opção, e ele escreve os irritantes scripts GNU autotools para mim.Eu tive que adaptar o configure.ac
script, para que o configure encontre uma determinada biblioteca em qualquer sistema.Mas não foi tão ruim.Obter os scripts do autoconf dessa maneira é bom, porque não preciso escrevê-los sozinho e, quando eu distribuir meu projeto, parecerá que eu os escrevi, e os usuários ainda poderão construir meu projeto no deus- cedido, com
./configure && make && make install