Alt eller næsten alle (og hvis du ikke er heldig) har vi været nødt til at kompilere et program ud fra kildekoden. Faktisk er det i de fleste projekter nok at lave en ./configure && make && make installation for at installere programmet, men vi vil se de forskellige alternativer:
GNU Make
GNU Make er et kompilationssystem på lavt niveau, få ting er konfigureret, og der udføres ingen test:
Fordele:
- Meget udbredt
- Let at forstå
- Fast
Ulemper:
- Lille konfigurerbar
- Vanskeligt at vedligeholde
- Udfører ikke test
make
BSD-mærke
BSD Make er en anden version af Make, der i øjeblikket bruges af * BSD-operativsystemer. Det adskiller sig i GNU Make som den mest omfattende BSD Make i funktionaliteter, selvom det er mindre udbredt.
Fordele:
- Fast
- Let at forstå
- Flere funktioner end GNU Make
Ulemper:
- Ikke udbredt i Linux-verdenen
- Udfører ikke test
- Lille konfigurerbar
- Vanskeligt at vedligeholde
make
autotools
Autotools er det officielle GNU-system og genererer et script kaldet configure, som vi skal kalde for at generere den tilsvarende Makefile fra GNU Make. Det bruges i vid udstrækning, men flere og flere mennesker (inklusive mig selv) synes, at det er for besværligt, vanskeligt, langsomt og ikke særlig kompatibelt.
Fordele:
- Meget konfigurerbar
- Meget udbredt
Ulemper:
- Lille bærbarhed mellem ikke-UNIX-systemer
- Udfør for mange tests (tjek ALT, og ALT er ALT)
- Meget langsom ved konfiguration
- Dårlig bagudkompatibilitet
./configure && make
CMake
(Mit foretrukne system) CMake er et system, der kommer til at kompensere for manglerne ved Autotools i mange aspekter, såsom dets forfærdelige bagudkompatibilitet og bærbarhed. Forbedrer også testsystemet, der er meget konfigurerbart til hvert projekts behov. Sandheden er, at flere og flere projekter bruger CMake som KDE, PortAudio, Ogre3D osv. Vi kan genkende denne type systemer takket være en CMakeLists.txt-fil, der genererer en Makefile eller et projekt til Eclipse eller CodeBlocks
Fordele:
- Fast
- Stor platformssupport
- Du kan definere testene på en meget tilpasselig måde
Ulemper:
- Svært at forstå i starten
- Du skal arbejde med en abstraktion, der i starten kan være skræmmende
- Lille spredning, selvom den lidt efter lidt vokser
cmake . && make
Q Lav
QMake er et system designet af Trolltech til at kompilere projekter lavet i Qt. På denne måde lægger qmake stor vægt på Qt og er normalt det format, der bruges af IDE'er som QtCreator. Det er ret populært i Qt-projekter, men det findes ikke uden for dette miljø:
Fordele:
- Meget godt integreret med Qt
- Fast
- God multiplatform inden for Qt
Ulemper:
- Ikke almindelig uden for Qt-apps
qmake . && make
SCons
SCons er et Python-baseret system til kompilering af C / C ++ - projekter. I modsætning til Autotools, CMake eller QMake; SCons bygger ikke en Makefile. SCons er meget modificerbart, men det er måske den langsomste i enkle operationer
Fordele:
- Nem ændring
- Tag de retfærdige prøver
Ulemper:
- Lidt spredning
- langsom
scons
Boost. Jam
Boost.Jam er en version af Perforce Jam, der bruges i de populære C ++ Boost-biblioteker, selv om kompileringssystemet kan bruges separat. I modsætning til GNU Make bruger Boost.Jam Jamfiles, som er en forbedret version af Makefiles. De er ret populære i BeOS / Zeta / Haiku-miljøet.
Fordele:
- Fast
- Den korteste at skrive
Ulemper:
- Lidt spredning
- Vanskeligheder ved at udføre tests
bjam
Ninja
Ninja er et system, der er udviklet af Google til at levere et ultrahurtigt byggesystem, der oprindeligt var designet til Chromium-projektet. Ninja er ikke designet til at være let at ændre, ifølge sine egne forfattere skal der findes et system, der genererer Ninja. De anbefalede er CMake og gyp.
Fordele:
- Muy rápido
Ulemper:
- Du har brug for et andet system til at gyde Ninja
- Lidt spredning
ninja
andre
Du kan bruge ethvert andet system, såsom dit eget bash- eller python-script. Der er også generatorer til andre ikke-indfødte sprog, der kan bruges som Gradle, Maven, gyp osv.
4 kommentarer, lad dine
Make er ikke et kompilationssystem, det er en generator af binære filer (eller mål) fra dets kildekode. Det kan også bruges som en opgaveløber.
Jeg adskiller dig med, at BSD-mærket er bredere i funktionalitet, GNU-mærket er mere komplet, det har mere funktionalitet. Og jeg siger dette fra min egen erfaring, i BSD skal jeg altid installere GNU make, fordi BSD make er meget enkel sammenlignet med GNU make.
Jeg er enig med dig i, at Autotools er ret besværligt, jeg foretrækker bare at bruge Makefile. Makefiler genereret af autotools er svære at fejle.
Greetings!
Tak for kommentar!
Efter min mening har GNU-mærke altid været mere traditionelt og tro mod det oprindelige mærkeprogram, og BSD-mærke har altid været mere innovative, men det kan være, at jeg har bemærket andre ting, når jeg foretager sammenligningen.
Autotools er virkelig en stor hovedpine. Som bidragyder til Haiku-operativsystemet har jeg været nødt til at portere software med autotools, og det er helvede. Der er ikke få tilfælde, hvor jeg endte med at oprette Makefile eller CMakeLists.txt, før jeg fik fikset dette rod.
Jeg bruger i øjeblikket Premake4, meget konfigurerbar og enkel baseret på Lua-scripts. Se, hvis du ikke ved det.
Tillykke med artiklen, enkel og kortfattet, fremragende reference.
'make check' bruges til at kontrollere kompilering efter brug af make
Vær hilset