Toate sau aproape toate (și dacă nu ești norocos) a trebuit să compilăm un program din codul sursă. De fapt, în majoritatea proiectelor este suficient să faceți o instalare ./configure && make && make pentru a instala programul, dar vom vedea diferitele alternative:
GNU Make
GNU Make este un sistem de compilare de nivel scăzut, sunt configurate câteva lucruri și nu se efectuează teste:
Pro-uri:
- Foarte răspândit
- Simplu de înțeles
- Rapid
Contra:
- Puțin configurabil
- Greu de întreținut
- Nu efectuează teste
make
BSD Make
BSD Make este o altă versiune a Make utilizată în prezent de sistemele de operare * BSD. Diferă de GNU Make, fiind cea mai cuprinzătoare funcționalitate BSD Make, deși este mai puțin răspândită.
Pro-uri:
- Rapid
- Simplu de înțeles
- Mai multe caracteristici decât GNU Make
Contra:
- Nu este răspândit în lumea Linux
- Nu efectuează teste
- Puțin configurabil
- Greu de întreținut
make
Instrumente automate
Autotools este sistemul oficial GNU și generează un script numit configure pe care trebuie să-l apelăm pentru a genera Makefile corespunzător din GNU Make. Este răspândit pe scară largă, totuși, din ce în ce mai mulți oameni (inclusiv eu) cred că este prea greoi, dificil, lent și nu prea compatibil.
Pro-uri:
- Foarte configurabil
- Foarte răspândit
Contra:
- Portabilitate redusă între sistemele non-UNIX
- Efectuați prea multe teste (verificați TOTUL și TOTUL este TOT)
- Foarte lent la setare
- Compatibilitate slabă înapoi
./configure && make
CMake
(Sistemul meu preferat) CMake este un sistem care vine să suplinească deficiențele Autotools în multe aspecte, cum ar fi compatibilitatea și portabilitatea teribilă a acesteia. De asemenea, îmbunătățirea sistemului de testare care este extrem de configurabil pentru nevoile fiecărui proiect. Adevărul este că tot mai multe proiecte folosesc CMake, cum ar fi KDE, PortAudio, Ogre3D etc. Putem recunoaște acest tip de sisteme datorită unui fișier CMakeLists.txt care va genera un Makefile sau un proiect pentru Eclipse sau CodeBlocks
Pro-uri:
- Rapid
- Suport excelent între platforme
- Puteți defini testele într-un mod foarte personalizabil
Contra:
- Greu de înțeles la început
- Trebuie să lucrați cu o abstractizare care poate fi înspăimântătoare la început
- Puțin răspândit, deși încetul cu încetul crește
cmake . && make
QFaceți
QMake este un sistem conceput de Trolltech pentru a compila proiecte realizate în Qt. În acest fel, qmake pune mult accent pe Qt și este de obicei formatul folosit de IDE-uri precum QtCreator. Este destul de popular în proiectele Qt, dar nu se găsește în afara acestui mediu:
Pro-uri:
- Foarte bine integrat cu Qt
- Rapid
- Multiplatformă bună în Qt
Contra:
- Mai puțin frecvente în afara aplicațiilor Qt
qmake . && make
SCcons
SCons este un sistem bazat pe Python pentru compilarea proiectelor C / C ++. Spre deosebire de Autotools, CMake sau QMake; SCons nu construiește un Makefile. SCons este foarte modificabil, dar este poate cel mai lent în operații simple
Pro-uri:
- Modificare ușoară
- Faceți testele corecte
Contra:
- Puțină răspândire
- lent
scons
Boost Jam
Boost.Jam este o versiune a Perforce Jam care este utilizată în popularele biblioteci Boost C ++, deși sistemul de compilare poate fi utilizat separat. Spre deosebire de GNU Make, Boost.Jam folosește Jamfiles, care sunt o versiune îmbunătățită a Makefiles. Sunt destul de populare în mediul BeOS / Zeta / Haiku.
Pro-uri:
- Rapid
- Cel mai scurt de scris
Contra:
- Puțină răspândire
- Dificultate în efectuarea testelor
bjam
Ninja
Ninja este un sistem dezvoltat de Google pentru a oferi un sistem de construcție ultra-rapid conceput inițial pentru a fi cel al proiectului Chromium. Ninja nu este conceput pentru a fi ușor de modificat, potrivit propriilor autori, trebuie găsit un sistem care generează Ninja. Cele recomandate sunt CMake și gyp.
Pro-uri:
- Muy rápido
Contra:
- Ai nevoie de un alt sistem pentru a da naștere lui Ninja
- Puțină răspândire
ninja
alții
Puteți utiliza orice alt sistem, cum ar fi propriul script bash sau python. Există, de asemenea, generatoare pentru alte limbi non-native care pot fi utilizate precum Gradle, Maven, gyp etc.
Make nu este un sistem de compilare, este un generator de binare (sau ținte) din codul său sursă. Poate fi folosit și ca alergător de sarcini.
Diferesc cu dvs. că marca BSD este mai cuprinzătoare în ceea ce privește funcționalitatea, marca GNU este mai completă, are mai multe funcționalități. Și spun asta din propria experiență, în BSD trebuie să instalez întotdeauna GNU make pentru că BSD make este foarte simplu în comparație cu GNU make.
Sunt de acord cu dvs. că Autotools este destul de greoaie, prefer să folosesc doar Makefile. Fișierele make generate de Autotools sunt dificil de depanat.
Salutări!
Multumesc pentru comentariu!
În opinia mea, GNU make a fost întotdeauna mai tradițional și mai fidel programului original make, iar BSD make a fost întotdeauna mai inovator, dar poate că am observat și alte lucruri atunci când fac comparația.
Instrumentele automate sunt într-adevăr o mare durere de cap. În calitate de colaborator la sistemul de operare Haiku, a trebuit să port software cu unelte automate și este iad. Există puține cazuri în care am ajuns să creez Makefile sau CMakeLists.txt înainte de a remedia această mizerie.
În prezent folosesc Premake4, foarte configurabil și simplu bazat pe scripturi Lua. Aruncă o privire dacă nu o știi.
Felicitări pentru articol, simplu și concis, referință excelentă.
'make check' este folosit pentru a verifica compilația după utilizarea make
Salutari