Compilatiesystemen. Meer dan eenvoudig configureren, maken, maken installeren

Alles of bijna allemaal (en als je geen geluk hebt) hebben we een programma moeten compileren uit de broncode. Eigenlijk is het bij de meeste projecten voldoende om een ​​./configure && make && make install te doen om het programma te installeren, maar we gaan de verschillende alternatieven bekijken:

GNU-merk

GNU Make is een low-level compilatiesysteem, er zijn maar weinig dingen geconfigureerd en er worden geen tests uitgevoerd:

Voors:

  • Zeer wijdverbreid
  • Eenvoudig te begrijpen
  • Snel

nadelen:

  • Weinig configureerbaar
  • Moeilijk te onderhouden
  • Voert geen tests uit

make

BSD merk

BSD Make is een andere versie van Make die momenteel wordt gebruikt door * BSD-besturingssystemen. Het verschilt van GNU Make, omdat het de meest uitgebreide BSD Make-functionaliteit is, hoewel het minder wijdverspreid is.

Voors:

  • Snel
  • Eenvoudig te begrijpen
  • Meer functies dan GNU Make

nadelen:

  • Niet wijdverspreid in de Linux-wereld
  • Voert geen tests uit
  • Weinig configureerbaar
  • Moeilijk te onderhouden

make

automatisch gereedschap

Autotools is het officiële GNU-systeem en genereert een script genaamd configure dat we moeten aanroepen om de corresponderende Makefile van GNU Make te genereren. Het wordt breed uitgebreid, maar steeds meer mensen (inclusief ikzelf) vinden het te omslachtig, moeilijk, traag en niet erg compatibel.

Voors:

  • Zeer configureerbaar
  • Zeer wijdverbreid

nadelen:

  • Lage draagbaarheid tussen niet-UNIX-systemen
  • Voer te veel tests uit (controleer ALLES, en ALLES is ALLES)
  • Zeer traag bij het instellen
  • Slechte achterwaartse compatibiliteit

./configure && make

CMaak

(Mijn favoriete systeem) CMake is een systeem dat de tekortkomingen van Autotools in veel opzichten compenseert, zoals de vreselijke achterwaartse compatibiliteit en draagbaarheid. Ook het verbeteren van het testsysteem dat in hoge mate configureerbaar is voor de behoeften van elk project. De waarheid is dat steeds meer projecten CMake gebruiken, zoals KDE, PortAudio, Ogre3D, enz. We kunnen dit type systemen herkennen dankzij een CMakeLists.txt-bestand dat een Makefile of een project voor Eclipse of CodeBlocks zal genereren

Voors:

  • Snel
  • Geweldige platformonafhankelijke ondersteuning
  • U kunt de tests op een zeer aanpasbare manier definiëren

nadelen:

  • In het begin moeilijk te begrijpen
  • Je moet werken met een abstractie die in het begin eng kan zijn
  • Beetje verspreid, hoewel het beetje bij beetje groeit

cmake . && make

QMaak

QMake is een systeem dat is ontworpen door Trolltech om projecten te compileren die in Qt. Op deze manier legt qmake veel nadruk op Qt en is dit meestal het formaat dat wordt gebruikt door IDE's zoals QtCreator. Het is behoorlijk populair in Qt-projecten, maar het wordt niet buiten deze omgeving gevonden:

Voors:

  • Zeer goed geïntegreerd met Qt
  • Snel
  • Goed multiplatform binnen Qt

nadelen:

  • Ongewoon buiten Qt-apps

qmake . && make

SConen

SCons is een op Python gebaseerd systeem voor het compileren van C / C ++ - projecten. In tegenstelling tot Autotools, CMake of QMake; SCons bouwt geen Makefile. SCons is zeer aanpasbaar, maar is misschien wel de langzaamste bij eenvoudige bewerkingen
Voors:

  • Gemakkelijke aanpassing
  • Doe de eerlijke tests

nadelen:

  • Weinig verspreiding
  • traag

scons

Boost Jam

Boost.Jam is een versie van Perforce Jam die wordt gebruikt in de populaire C ++ Boost-bibliotheken, hoewel het compilatiesysteem afzonderlijk kan worden gebruikt. In tegenstelling tot GNU Make gebruikt Boost.Jam Jamfiles, een verbeterde versie van Makefiles. Ze zijn behoorlijk populair in de BeOS / Zeta / Haiku-omgeving.

Voors:

  • Snel
  • De kortste om te schrijven

nadelen:

  • Weinig verspreiding
  • Moeilijkheden bij het uitvoeren van tests

bjam

Ninja

Ninja is een systeem ontwikkeld door Google om een ​​ultrasnel build-systeem te bieden dat oorspronkelijk is ontworpen als dat van het Chromium-project. Ninja is niet ontworpen om gemakkelijk aan te passen, volgens de eigen auteurs moet een systeem worden gevonden dat Ninja genereert. Aanbevolen zijn CMake en gyp.

Voors:

  • Muy rápido

nadelen:

  • Je hebt een ander systeem nodig om Ninja te spawnen
  • Weinig verspreiding

ninja

anderen

U kunt elk ander systeem gebruiken, zoals uw eigen bash- of python-script. Er zijn ook generatoren voor andere niet-moedertalen die kunnen worden gebruikt, zoals Gradle, Maven, gyp, enz.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   abimaelmartell zei

    Make is geen compilatiesysteem, het is een generator van binaire bestanden (of doelen) uit de broncode. Het kan ook worden gebruikt als taakloper.

    Ik ben van mening dat het BSD-merk breder is in functionaliteit, het GNU-merk completer, het heeft meer functionaliteit. En ik zeg dit uit mijn eigen ervaring, in BSD moet ik altijd GNU make installeren omdat BSD make heel eenvoudig is in vergelijking met GNU make.

    Ik ben het met je eens dat Autotools behoorlijk omslachtig is, ik gebruik liever gewoon de Makefile. Makefiles gegenereerd door Autotools zijn moeilijk te debuggen.

    Groeten!

    1.    AdrianArroyoStreet zei

      Bedankt voor het reageren!
      Naar mijn mening is GNU make altijd traditioneler geweest en trouw aan het originele make-programma en BSD make is altijd innovatiever geweest, maar het kan zijn dat ik bij het maken van de vergelijking andere dingen heb opgemerkt.

      Autotools zijn echt een grote hoofdpijn. Als bijdrager aan het Haiku-besturingssysteem heb ik software moeten porten met autotools en het is een hel. Er zijn niet een paar gevallen waarin ik de Makefile of CMakeLists.txt heb gemaakt voordat ik die puinhoop oploste.

  2.   gooi daniels zei

    Ik gebruik momenteel Premake4, zeer configureerbaar en eenvoudig op basis van Lua-scripts. Kijk eens als je het niet weet.
    Gefeliciteerd met het artikel, eenvoudig en beknopt, uitstekende referentie.

  3.   beenderen zei

    'make check' wordt gebruikt om de compilatie te controleren na gebruik van make
    Groeten