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.
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!
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.
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.
'Make check' serveix per revisar la compilacion després d'utilitzar make
Salutacions