Visi arba beveik visi (ir jei jums nesiseka), mes turėjome sudaryti programą iš šaltinio kodo. Tiesą sakant, daugumoje projektų pakanka atlikti ./configure && make && make install, kad įdiegtumėte programą, bet mes pamatysime įvairias alternatyvas:
GNU gamintojas
„GNU Make“ yra žemo lygio kompiliavimo sistema, sukonfigūruota keletas dalykų ir neatliekami jokie bandymai:
Argumentai "už":
- Labai paplitusi
- Paprasta suprasti
- Greitai
Suvart:
- Mažai konfigūruojama
- Sunku prižiūrėti
- Neatlieka testų
make
BSD gamintojas
„BSD Make“ yra dar viena „Make“ versija, kurią šiuo metu naudoja * BSD operacinės sistemos. GNU „Make“ yra išsamiausias „BSD Make“ funkcionalumas, nors jis yra mažiau paplitęs.
Argumentai "už":
- Greitai
- Paprasta suprasti
- Daugiau funkcijų nei „GNU Make“
Suvart:
- Nėra plačiai paplitęs „Linux“ pasaulyje
- Neatlieka testų
- Mažai konfigūruojama
- Sunku prižiūrėti
make
Automatinės priemonės
„Autotools“ yra oficiali GNU sistema ir sukuria scenarijų, pavadintą configure, kurį turime iškviesti, kad sugeneruotume atitinkamą „Makefile“ iš „GNU Make“. Jis plačiai naudojamas, tačiau vis daugiau žmonių (įskaitant ir mane) mano, kad jis yra per daug sudėtingas, sunkus, lėtas ir nelabai suderinamas.
Argumentai "už":
- Labai konfigūruojamas
- Labai paplitusi
Suvart:
- Mažas perkeliamumas tarp ne UNIX sistemų
- Atlikite per daug testų (patikrinkite VISKĄ, o VISKAS VISKAS)
- Konfigūruojant labai lėtai
- Blogas atgalinis suderinamumas
./configure && make
CMake
(Mano mėgstamiausia sistema) „CMake“ yra sistema, kuri kompensuoja „Autotools“ trūkumus daugeliu aspektų, pavyzdžiui, dėl baisaus atgalinio suderinamumo ir perkeliamumo. Taip pat tobulinama testavimo sistema, kurią galima konfigūruoti atsižvelgiant į kiekvieno projekto poreikius. Tiesa ta, kad vis daugiau projektų naudoja „CMake“, pvz., KDE, „PortAudio“, „Ogre3D“ ir kt. Šio tipo sistemas galime atpažinti dėka CMakeLists.txt failo, kuris sugeneruos „Makefile“ arba „Eclipse“ ar „CodeBlocks“ projektą.
Argumentai "už":
- Greitai
- Puiki parama tarp platformų
- Testus galite apibrėžti labai tinkamu būdu
Suvart:
- Iš pradžių sunku suprasti
- Turite dirbti su abstrakcija, kuri iš pradžių gali būti bauginanti
- Mažai plinta, nors po truputį auga
cmake . && make
„QMake“
„QMake“ yra „Trolltech“ sukurta sistema, skirta kaupti Qt sukurtus projektus. Tokiu būdu qmake daug dėmesio skiria Qt ir paprastai yra formatas, kurį naudoja IDE, pvz., QtCreator. Jis yra gana populiarus Qt projektuose, tačiau jo nėra už šios aplinkos ribų:
Argumentai "už":
- Labai gerai integruotas su Qt
- Greitai
- Geras daugiaplatformis Qt
Suvart:
- Nedažnas už „Qt“ programų ribų
qmake . && make
Skoniai
„SCons“ yra „Python“ pagrindu sukurta sistema, skirta sudaryti C / C ++ projektus. Skirtingai nuo „Autotools“, „CMake“ ar „QMake“; SCons nekuria „Makefile“. SCON yra labai modifikuojamas, tačiau tai greičiausiai yra lėčiausias paprastų operacijų metu
Argumentai "už":
- Lengva modifikuoti
- Laikykitės sąžiningų testų
Suvart:
- Mažai išplito
- Lėtas
scons
Padidinkite
„Boost.Jam“ yra „Perforce Jam“ versija, naudojama populiariose C ++ Boost bibliotekose, nors kompiliavimo sistemą galima naudoti atskirai. Skirtingai nuo „GNU Make“, „Boost.Jam“ naudoja „Jamfiles“, kurie yra patobulinta „Makefiles“ versija. Jie yra gana populiarūs „BeOS“ / „Zeta“ / „Haiku“ aplinkoje.
Argumentai "už":
- Greitai
- Trumpiausiai parašyti
Suvart:
- Mažai išplito
- Sunkumai atliekant testus
bjam
Ninja
„Ninja“ yra „Google“ sukurta sistema, užtikrinanti ypač greitą „Chromium“ projekto sukūrimo sistemą. „Ninja“ nėra sukurta taip, kad ją būtų lengva modifikuoti, anot jos pačios autorių, reikėtų rasti sistemą, kuri generuotų „Ninja“. Rekomenduojami yra CMake ir gyp.
Argumentai "už":
- Muy rápido
Suvart:
- Norint išgauti „Ninja“, reikia kitos sistemos
- Mažai išplito
ninja
kiti
Galite naudoti bet kurią kitą sistemą, pvz., Savo „bash“ arba „python“ scenarijų. Taip pat yra generatoriai kitoms ne gimtosioms kalboms, kurie gali būti naudojami, pavyzdžiui, „Gradle“, „Maven“, „gyp“ ir kt.
„Make“ nėra kompiliavimo sistema, ji yra dvejetainių failų (arba taikinių) generatorius iš savo šaltinio kodo. Jis taip pat gali būti naudojamas kaip užduočių bėgikas.
Aš su jumis skiriasi tuo, kad BSD markė yra platesnio funkcionalumo, GNU markė yra išsamesnė, ji turi daugiau funkcionalumo. Tai sakau iš savo patirties, BSD visada turiu įdiegti GNU make, nes BSD make yra labai paprasta, palyginti su GNU make.
Sutinku su jumis, kad „Autotools“ yra gana sudėtinga, aš norėčiau tiesiog naudoti „Makefile“. „Autotools“ sugeneruotus failų failus sunku derinti.
Sveiki atvykę!
Ačiū už komentarą!
Mano nuomone, „GNU make“ visada buvo tradiciškesnis ir ištikimesnis originaliai gamintojo programai, o „BSD make“ visada buvo naujoviškesnis, tačiau gali būti, kad palygindamas pastebėjau kitus dalykus.
Automatinės priemonės tikrai yra didelis galvos skausmas. Kaip „Haiku“ operacinės sistemos bendradarbis, man teko perkelti programinę įrangą su automatiniais įrankiais ir tai yra pragaras. Nėra nedaug atvejų, kai prieš taisydama šią netvarką galiausiai sukūriau „Makefile“ arba „CMakeLists.txt“.
Šiuo metu naudoju „Premake4“, labai konfigūruojamą ir paprastą pagal „Lua“ scenarijus. Pažvelkite, jei to nežinote.
Sveikiname straipsnį, paprasta ir glausta, puiki nuoroda.
'make check' naudojamas kompiliavimui patikrinti panaudojus make
Sveikinimai