Všetci alebo takmer všetci (a ak nemáte šťastie) sme museli zostaviť program zo zdrojového kódu. Vlastne vo väčšine projektov stačí na inštaláciu programu urobiť ./configure && make && make install, ale uvidíme rôzne alternatívy:
Značka GNU
GNU Make je systém kompilácie na nízkej úrovni, je nakonfigurovaných málo vecí a nevykonávajú sa žiadne testy:
Pros:
- Veľmi rozšírené
- Jednoduché na pochopenie
- Rýchlo
nevýhody:
- Málo konfigurovateľné
- Ťažko sa udržiava
- Nevykonáva testy
make
Značka BSD
BSD Make je ďalšou verziou Make, ktorú v súčasnosti používajú operačné systémy * BSD. Líši sa od GNU Make, ktorý je najkomplexnejšou funkciou BSD Make vo funkcii, aj keď je menej rozšírený.
Pros:
- Rýchlo
- Jednoduché na pochopenie
- Viac funkcií ako GNU Make
nevýhody:
- Vo svete Linuxu nie je rozšírený
- Nevykonáva testy
- Málo konfigurovateľné
- Ťažko sa udržiava
make
Automatické nástroje
Autotools je oficiálny systém GNU a generuje skript s názvom configure, ktorý musíme zavolať, aby sme vygenerovali zodpovedajúci súbor GNU Make Makefile. Je široko používaný, stále viac ľudí (vrátane mňa) si však myslí, že je príliš ťažkopádny, ťažký, pomalý a nie príliš kompatibilný.
Pros:
- Vysoko konfigurovateľný
- Veľmi rozšírené
nevýhody:
- Nízka prenosnosť medzi systémami, ktoré nie sú systémami UNIX
- Vykonajte príliš veľa testov (skontrolujte VŠETKO a VŠETKO je VŠETKO)
- Pri nastavovaní veľmi pomalé
- Zlá spätná kompatibilita
./configure && make
CMake
(Môj obľúbený systém) CMake je systém, ktorý slúži na vyrovnanie nedostatkov nástroja Autotools v mnohých aspektoch, ako je jeho strašná spätná kompatibilita a prenosnosť. Vylepšenie tiež testovacieho systému, ktorý je vysoko konfigurovateľný pre potreby každého projektu. Pravdou je, že čoraz viac projektov využíva CMake ako KDE, PortAudio, Ogre3D atď. Tento typ systému môžeme rozpoznať vďaka súboru CMakeLists.txt, ktorý vygeneruje Makefile alebo projekt pre Eclipse alebo CodeBlocks
Pros:
- Rýchlo
- Skvelá podpora viacerých platforiem
- Testy môžete definovať veľmi prispôsobiteľným spôsobom
nevýhody:
- Spočiatku ťažko pochopiteľné
- Musíte pracovať s abstrakciou, ktorá môže byť spočiatku strašidelná
- Malá šírka, aj keď pomaly rastie
cmake . && make
qmake
QMake je systém navrhnutý spoločnosťou Trolltech na kompiláciu projektov vytvorených v Qt. Týmto spôsobom qmake kladie veľký dôraz na Qt a zvyčajne je to formát používaný IDE, ako je QtCreator. Je pomerne populárny v projektoch Qt, ale nenájde sa mimo tohto prostredia:
Pros:
- Veľmi dobre integrovaný s Qt
- Rýchlo
- Dobrá multiplatforma v rámci Qt
nevýhody:
- Mimo aplikácií Qt neobvyklé
qmake . && make
SCons
SCons je systém založený na Pythone na kompiláciu projektov v C / C ++. Na rozdiel od Autotools, CMake alebo QMake; SCons nevytvára Makefile. SCons je veľmi modifikovateľný, ale je asi najpomalší v jednoduchých operáciách
Pros:
- Ľahká úprava
- Urobte si spravodlivé testy
nevýhody:
- Malá nátierka
- pomalý
scons
Posilniť. Jam
Boost.Jam je verzia Perforce Jam, ktorá sa používa v populárnych knižniciach C ++ Boost, hoci kompilačný systém je možné použiť aj samostatne. Na rozdiel od GNU Make používa Boost.Jam Jamfiles, ktoré sú vylepšenou verziou Makefiles. Sú pomerne populárne v prostredí BeOS / Zeta / Haiku.
Pros:
- Rýchlo
- Najkratšia na písanie
nevýhody:
- Malá nátierka
- Obtiažnosť pri vykonávaní testov
bjam
ninja
Ninja je systém vyvinutý spoločnosťou Google s cieľom poskytnúť ultrarýchly systém budovania, ktorý bol pôvodne navrhnutý ako projekt v rámci projektu Chromium. Ninja nie je navrhnutá tak, aby sa dala ľahko modifikovať, podľa vlastných autorov treba nájsť systém, ktorý Ninja generuje. Odporúčané sú CMake a gyp.
Pros:
- Veľmi rýchlo
nevýhody:
- Potrebujete iný systém na rozmnožovanie Ninja
- Malá nátierka
ninja
Iné
Môžete použiť akýkoľvek iný systém, napríklad svoj vlastný skript bash alebo python. Existujú aj generátory pre ďalšie nepôvodné jazyky, ktoré je možné použiť, napríklad Gradle, Maven, gyp atď.
Make nie je kompilačný systém, je to generátor binárnych súborov (alebo cieľov) z jeho zdrojového kódu. Môže byť tiež použitý ako bežca úloh.
Líši sa s tebou, že značka BSD má širšiu funkcionalitu, značka GNU je úplnejšia a má viac funkcií. A hovorím to z vlastnej skúsenosti, v BSD musím vždy inštalovať GNU make, pretože BSD make je v porovnaní s GNU make veľmi jednoduchý.
Súhlasím s vami, že Autotools je dosť ťažkopádny, radšej používam iba Makefile. Ladenie súborov generovaných programom Autotools je ťažké.
Zdravím!
Ďakujem za komentár!
Podľa môjho názoru bol make GNU vždy tradičnejší a vernejší pôvodnému programu make a BSD make bol vždy inovatívnejší, ale je možné, že som si pri porovnávaní všimol aj iné veci.
Automatické nástroje sú naozaj veľká bolesť hlavy. Ako prispievateľ do operačného systému Haiku som musel prenášať softvér s automatickými nástrojmi a je to peklo. Nie je niekoľko prípadov, že by som pred opravením tohto neporiadku skončil vytvorením súboru Makefile alebo CMakeLists.txt.
Momentálne používam Premake4, veľmi konfigurovateľný a jednoduchý na základe skriptov Lua. Ak to neviete, rozhliadnite sa.
Gratulujem k článku, jednoduché a výstižné, vynikajúca referencia.
'make check' sa používa na kontrolu kompilácie po použití make
Zdravím vás