Všichni nebo téměř všichni (a pokud nemáte štěstí) jsme museli sestavit program ze zdrojového kódu. Ve skutečnosti ve většině projektů stačí k instalaci programu provést ./configure && make && make install, ale uvidíme různé alternativy:
Značka GNU
GNU Make je kompilační systém nízké úrovně, je nakonfigurováno několik věcí a neprovádějí se žádné testy:
Klady:
- Velmi rozšířené
- Snadno pochopitelné
- Rychle
Nevýhody:
- Trochu konfigurovatelný
- Je obtížné udržovat
- Neprovádí testy
make
Značka BSD
BSD Make je další verze Make, kterou aktuálně používají operační systémy * BSD. Liší se tím, že GNU Make je nejobsáhlejší BSD Make ve funkcích, i když je méně rozšířený.
Klady:
- Rychle
- Snadno pochopitelné
- Více funkcí než GNU Make
Nevýhody:
- Ve světě Linuxu není příliš rozšířený
- Neprovádí testy
- Trochu konfigurovatelný
- Je obtížné udržovat
make
Automatické nástroje
Autotools je oficiální systém GNU a generuje skript s názvem configure, který musíme zavolat, abychom vygenerovali odpovídající Makefile z GNU Make. Je široce používán, ale stále více lidí (včetně mě) si myslí, že je to příliš těžkopádné, obtížné, pomalé a málo kompatibilní.
Klady:
- Vysoce konfigurovatelné
- Velmi rozšířené
Nevýhody:
- Malá přenositelnost mezi systémy jinými než UNIX
- Proveďte příliš mnoho testů (zkontrolujte VŠE a VŠE je VŠE)
- Při nastavování velmi pomalé
- Špatná zpětná kompatibilita
./configure && make
CMake
(Můj preferovaný systém) CMake je systém, který vyrovnává nedostatky Autotools v mnoha aspektech, jako je jejich strašná zpětná kompatibilita a přenositelnost. Také vylepšení testovacího systému, který je vysoce konfigurovatelný pro potřeby každého projektu. Pravdou je, že stále více projektů používá CMake, jako je KDE, PortAudio, Ogre3D atd. Tento typ systému můžeme rozpoznat díky souboru CMakeLists.txt, který vygeneruje Makefile nebo projekt pro Eclipse nebo CodeBlocks
Klady:
- Rychle
- Skvělá podpora pro různé platformy
- Testy můžete definovat velmi přizpůsobitelným způsobem
Nevýhody:
- Zpočátku těžko pochopitelné
- Musíte pracovat s abstrakcí, která může být zpočátku strašidelná
- Malé šíření, i když kousek po kousku, roste
cmake . && make
Q Make
QMake je systém navržený společností Trolltech pro kompilaci projektů vytvořených v Qt. Tímto způsobem qmake klade velký důraz na Qt a obvykle jde o formát používaný IDE jako QtCreator. Je docela populární v projektech Qt, ale mimo toto prostředí se nenachází:
Klady:
- Velmi dobře integrovaný s Qt
- Rychle
- Dobrá multiplatforma v Qt
Nevýhody:
- Mimo aplikace Qt neobvyklé
qmake . && make
SCon
SCons je systém založený na Pythonu pro kompilaci projektů C / C ++. Na rozdíl od Autotools, CMake nebo QMake; SCons nevytváří Makefile. SCons je velmi upravitelný, ale je snad nejpomalejší v jednoduchých operacích
Klady:
- Snadná modifikace
- Proveďte spravedlivé testy
Nevýhody:
- Malá pomazánka
- Pomalu
scons
Zvyšte
Boost.Jam je verze Perforce Jam, která se používá v populárních knihovnách C ++ Boost, ačkoli kompilační systém lze použít samostatně. Na rozdíl od GNU Make používá Boost.Jam Jamfiles, které jsou vylepšenou verzí Makefiles. Jsou docela populární v prostředí BeOS / Zeta / Haiku.
Klady:
- Rychle
- Nejkratší k psaní
Nevýhody:
- Malá pomazánka
- Obtížnost při provádění testů
bjam
Ninja
Ninja je systém vyvinutý společností Google za účelem poskytnutí ultrarychlého systému sestavení, který byl původně navržen jako projekt Chromium. Ninja není navržena tak, aby se dala snadno upravit, podle vlastních autorů je třeba najít systém, který ninja generuje. Doporučené jsou CMake a gyp.
Klady:
- Muy rápido
Nevýhody:
- K rozmístění Ninja potřebujete jiný systém
- Malá pomazánka
ninja
ostatní
Můžete použít jakýkoli jiný systém, například svůj vlastní skript bash nebo python. K dispozici jsou také generátory pro jiné nepůvodní jazyky, které lze použít, jako je Gradle, Maven, gyp atd.
Make není kompilační systém, je to generátor binárních souborů (nebo cílů) z jeho zdrojového kódu. Lze jej také použít jako běžce úloh.
Liším se s vámi, že značka BSD má širší funkčnost, značka GNU je úplnější, má více funkcí. A říkám to z vlastní zkušenosti, v BSD musím vždy instalovat GNU make, protože BSD make je ve srovnání s GNU make velmi jednoduchý.
Souhlasím s vámi, že Autotools je docela těžkopádný, raději používám Makefile. Makefiles generované Autotools je obtížné ladit.
Zdravím!
Děkuji za komentář!
Podle mého názoru byl GNU make vždy tradičnější a věrnější původnímu programu make a BSD make byl vždy inovativnější, ale je možné, že jsem si při srovnávání všiml i jiných věcí.
Automatické nástroje jsou opravdu velká bolest hlavy. Jako přispěvatel do operačního systému Haiku jsem musel portovat software s automatickými nástroji a je to peklo. Není několik případů, že jsem před vytvořením tohoto nepořádku skončil vytvořením Makefile nebo CMakeLists.txt.
V současné době používám Premake4, velmi konfigurovatelný a jednoduchý na základě skriptů Lua. Podívejte se, pokud to nevíte.
Gratuluji k článku, jednoduché a výstižné, vynikající reference.
'make check' se používá ke kontrole kompilace po použití make
Pozdravy