Todos ou quase todos (e se você não tiver sorte) tivemos que compilar um programa a partir do código-fonte. Na verdade, na maioria dos projetos é suficiente fazer um ./configure && make && make install para instalar o programa, mas vamos ver as diferentes alternativas:
GNU Make
GNU Make é um sistema de compilação de baixo nível, poucas coisas são configuradas e nenhum teste é realizado:
Prós:
- Muito difundido
- Simples de entender
- Rápido
Contras:
- Pouco configurável
- Difícil de manter
- Não realiza testes
make
Marca BSD
BSD Make é outra versão do Make atualmente usada por sistemas operacionais * BSD. É diferente no GNU Make ser o BSD Make mais abrangente em funcionalidades, embora seja menos difundido.
Prós:
- Rápido
- Simples de entender
- Mais recursos do que GNU Make
Contras:
- Não muito difundido no mundo Linux
- Não realiza testes
- Pouco configurável
- Difícil de manter
make
Ferramentas automáticas
Autotools é o sistema GNU oficial e gera um script chamado configure que devemos chamar para gerar o Makefile correspondente do GNU Make. É amplamente utilizado, porém mais e mais pessoas (inclusive eu) pensam que é muito complicado, difícil, lento e não muito compatível.
Prós:
- Altamente configurável
- Muito difundido
Contras:
- Pouca portabilidade entre sistemas não UNIX
- Realize muitos testes (verifique TUDO, e TUDO é TUDO)
- Muito lento ao configurar
- Fraca compatibilidade com versões anteriores
./configure && make
CMakeName
(Meu sistema favorito) CMake é um sistema que vem para compensar as deficiências do Autotools em muitos aspectos, como sua terrível compatibilidade com versões anteriores e portabilidade. Melhorando também o sistema de testes que são altamente configuráveis para as necessidades de cada projeto. A verdade é que cada vez mais projetos usam o CMake como KDE, PortAudio, Ogre3D, etc. Podemos reconhecer este tipo de sistema graças a um arquivo CMakeLists.txt que irá gerar um Makefile ou um projeto para Eclipse ou CodeBlocks
Prós:
- Rápido
- Excelente suporte multiplataforma
- Você pode definir os testes de uma forma muito personalizável
Contras:
- Difícil de entender no começo
- Você tem que trabalhar com uma abstração que pode ser assustadora no início
- Pouco se espalha embora aos poucos cresça
cmake . && make
Q fazer
QMake é um sistema desenvolvido pela Trolltech para compilar projetos feitos em Qt. Desta forma, o qmake coloca muita ênfase no Qt e normalmente é o formato usado por IDEs como o QtCreator. É bastante popular em projetos Qt, mas não é encontrado fora deste ambiente:
Prós:
- Muito bem integrado com Qt
- Rápido
- Boa plataforma multiplataforma dentro do Qt
Contras:
- Incomum fora de aplicativos Qt
qmake . && make
SCons
SCons é um sistema baseado em Python para compilar projetos C / C ++. Ao contrário do Autotools, CMake ou QMake; SCons não constrói um Makefile. SCons é muito modificável, mas talvez seja o mais lento em operações simples
Prós:
- Modificação fácil
- Faça os testes justos
Contras:
- Pouca propagação
- Devagar
scons
Impulsionar Jam
Boost.Jam é uma versão do Perforce Jam usada nas populares bibliotecas C ++ Boost, embora o sistema de compilação possa ser usado separadamente. Ao contrário do GNU Make, Boost.Jam usa Jamfiles, que são uma versão melhorada dos Makefiles. Eles são bastante populares no ambiente BeOS / Zeta / Haiku.
Prós:
- Rápido
- O mais curto para escrever
Contras:
- Pouca propagação
- Dificuldade em realizar testes
bjam
Ninja
Ninja é um sistema desenvolvido pelo Google para fornecer um sistema de compilação ultrarrápido originalmente projetado para ser o do projeto Chromium. O Ninja não foi desenhado para ser fácil de modificar, segundo os seus próprios autores deve ser encontrado um sistema que gera o Ninja. Os recomendados são CMake e gyp.
Prós:
- Muy rápido
Contras:
- Você precisa de outro sistema para gerar o Ninja
- Pouca propagação
ninja
outros
Você pode usar qualquer outro sistema, como seu próprio script bash ou python. Existem também geradores para outras línguas não nativas que podem ser usados como Gradle, Maven, gyp, etc.
Make não é um sistema de compilação, é um gerador de binários (ou destinos) de seu código-fonte. Ele também pode ser usado como um executor de tarefas.
Eu discordo com você que o make do BSD é mais amplo em funcionalidade, o make do GNU é mais completo, tem mais funcionalidades. E digo isso por experiência própria, no BSD sempre tenho que instalar o GNU make porque o BSD make é muito simples em comparação com o GNU make.
Eu concordo com você que Autotools é bastante complicado, eu prefiro usar apenas o Makefile. Makefiles gerados por Autotools são difíceis de depurar.
Saudações!
Obrigado por comentar!
Na minha opinião, o GNU make sempre foi mais tradicional e fiel ao programa make original e o BSD make sempre foi mais inovador, mas pode ser que eu tenha percebido outras coisas ao fazer a comparação.
Ferramentas automáticas são realmente uma grande dor de cabeça. Como contribuidor do sistema operacional Haiku, tive que portar software com autotools e é um inferno. Não foram poucos os casos em que acabei criando o Makefile ou o CMakeLists.txt antes de consertar essa bagunça.
Atualmente estou usando o Premake4, muito configurável e simples baseado em scripts Lua. Dê uma olhada se você não sabe.
Parabéns pelo artigo, simples e conciso, excelente referência.
'make check' é usado para verificar a compilação depois de usar make
saudações