Sistemas de compilação. Além de simples configurar, make, make install

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.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Abimaelmartell dito

    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!

    1.    AdrianArroyoStreet dito

      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.

  2.   Chuck daniels dito

    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.

  3.   Ossos dito

    'make check' é usado para verificar a compilação depois de usar make
    saudações