Sistemes de compilació. Més enllà de l'simple configuri, make, make install

Tots o gairebé tots (i si no ets afortunat) hem hagut de compilar des del codi font un programa. Realment en la majoria de projectes n'hi ha prou amb fer un ./configure && make && make install per instal·lar el programa, però anem a veure les diferents alternatives:

GNU Make

GNU Make és un sistema de compilació de baix nivell, es configuren poques coses i no es realitza cap test:

Pros:

  • molt estès
  • Simple d'entendre
  • Ràpid

Contres:

  • Poc configurable
  • Difícil de mantenir
  • No realitza tests

make

BSD Make

BSD Make és una altra versió de Make que actualment fan servir els sistemes operatius * BSD. Difereix en GNU Make sent el BSD Make més ampli en funcionalitats encara que està menys estès.

Pros:

  • Ràpid
  • Simple d'entendre
  • Més funcionalitats que GNU Make

Contres:

  • Poc estès en el món Linux
  • No realitza tests
  • Poc configurable
  • Difícil de mantenir

make

Eines automàtiques

Autotools és el sistema oficial de GNU i genera un script anomenat configure que hem de trucar per generar el correspodiente Makefile de GNU Make. Està àmpliament estès però cada vegada més gent (jo m'incloc) pensa que és un sistema massa molest, difícil, lent i poc compatible.

Pros:

  • altament configurable
  • molt estès

Contres:

  • Poca portabilitat entre sistemes No-UNIX
  • Realitza massa tests (verifica TOT, i TOT és TOT)
  • Molt lent a l'configurar
  • mala retrocompatibilitat

./configure && make

CMake

(El meu sistema preferit) CMake és un sistema que ve a suplir les mancances de Autotools en molts aspectes com la seva pèssima retrocompatibilitat i portabilitat. Millorant a més el sistema de tests que són molt configurables per a les necessitats de cada projecte. La veritat és que cada vegada més projectes fan servir CMake com ara KDE, PortAudio, Ogre3D, etc. Podem reconèixer aquest tipus de sistemes gràcies a un arxiu CMakeLists.txt que generarà un Makefile o un projecte per a Eclipse o CodeBlocks

Pros:

  • Ràpid
  • Gran suport multiplataforma
  • Es poden definir els tests d'una manera molt personalitzable

Contres:

  • Difícil d'entendre a el principi
  • S'ha de treballar amb una abstracció que a el principi pot espantar
  • A poc estès encara que poc a poc va a més

cmake . && make

QMake

QMake és un sistema dissenyat per Trolltech per compilar projectes fets en Qt. D'aquesta manera qmake emfatitza molt en Qt i sol ser el format usat per IDEs com QtCreator. És bastant popular en projectes Qt però no es troba fora d'aquest entorn:

Pros:

  • Molt ben integrat amb Qt
  • Ràpid
  • Bona multiplataforma dins de Qt

Contres:

  • Poc comú fora d'aplicacions Qt

qmake . && make

SCons

SCons és un sistema basat en Python per compilar els projectes de C / C ++. A l'contrari que Autotools, CMake o QMake; SCons no construeix un Makefile. SCons és molt modificable però és potser el més lent en les operacions senzilles
Pros:

  • fàcil modificació
  • Realitza els tests justos

Contres:

  • Poc estès
  • lent

scons

Boost.Jam

Boost.Jam és una versió de Perforce Jam que s'usa en les populars llibreries de C ++ Boost, encara que el sistema de compilació pot usar-se per separat. A l'contrari que GNU Make, Boost.Jam fa servir Jamfiles, que són una versió millorada dels Makefiles. Són bastant populars en l'ambient BeOS / Zeta / Haiku.

Pros:

  • Ràpid
  • El més curt d'escriure

Contres:

  • Poc estès
  • Dificultat per realitzar tests

bjam

ninja

Ninja és un sistema desenvolupat per Google per a proveir d'un sistema de compilació ultraràpid dissenyat originalment per a ser el d'el projecte Chromium. Ninja no està dissenyat per ser fàcil de modificar, segons els seus mateixos autors s'ha de buscar un sistema que generi a Ninja. Els recomanats són CMake i gyp.

Pros:

  • Molt ràpid

Contres:

  • Necessites un altre sistema per generar a Ninja
  • Poc estès

ninja

Altres

Podeu fer servir qualsevol altre sistema com ara el teu propi script de Bash o de Python. També hi ha generadors d'altres llenguatges no-natius que poden ser usats com Gradle, Maven, gyp, etc.


4 comentaris, deixa el teu

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   abimaelmartell va dir

    Make no és un sistema de compilació, és un generador d'binaris (o targets) des seu codi font. També es pot fer servir com ejecutador de tasques.

    Difereixo amb tu en què el BSD make és mes ampli en funcionalitats, el GNU make és més complet, té mes funcionalitats. I ho dic per experiència pròpia, en BSD sempre he de instal·lar GNU make perquè el make de BSD és molt senzill en comparació amb el de GNU.

    Coincideixo amb tu en què Autotools és bastant molest, prefereixo fer servir només el Makefile. Els makefiles generats per Autotools són difícils de debugear.

    Salutacions!

    1.    AdrianArroyoCarrer va dir

      Gràcies per comentar!
      Des del meu opinió GNU make ha estat sempre més tradicional i fidel a el programa original make i BSD make sempre ha estat més innovador però pot ser que jo m'hagi fixat en altres coses a l'fer la comparació.

      Realment les autotools són un problema de cap molt gran. Com a col·laborador de sistema operatiu Haiku he hagut de portar programari amb autotools i és un infern. No són pocs casos els que acabava abans creant el Makefile o el CMakeLists.txt abans que arreglar aquest trencadissa.

  2.   Chuck Daniels va dir

    Jo actualment estic utilitzant Premake4, molt configurable i simple basat en scripts en Lua. Fes-li una ull si no el coneixes.
    Felicitats per l'article, simple i concís, excel·lent referència.

  3.   ossos va dir

    'Make check' serveix per revisar la compilacion després d'utilitzar make
    Salutacions