Sammensetningssystemer. Utover enkel konfigurering, lag, lag installasjon

Alt eller nesten alt (og hvis du ikke er heldig) har vi måttet lage et program fra kildekoden. I de fleste prosjekter er det faktisk nok å gjøre ./configure && make && installer for å installere programmet, men vi kommer til å se de forskjellige alternativene:

GNU-fabrikat

GNU Make er et kompilasjonssystem på lavt nivå, få ting er konfigurert og ingen tester utføres:

Pros:

  • Veldig utbredt
  • Enkel å forstå
  • Fast

Cons:

  • Lite konfigurerbar
  • Vanskelig å vedlikeholde
  • Utfører ikke tester

make

BSD Merke

BSD Make er en annen versjon av Make som for tiden brukes av * BSD-operativsystemer. Det er forskjellig i GNU Make som den mest omfattende BSD Make i funksjonalitet, selv om den er mindre utbredt.

Pros:

  • Fast
  • Enkel å forstå
  • Flere funksjoner enn GNU Make

Cons:

  • Ikke utbredt i Linux-verdenen
  • Utfører ikke tester
  • Lite konfigurerbar
  • Vanskelig å vedlikeholde

make

Autoverktøy

Autotools er det offisielle GNU-systemet og genererer et skript som heter configure som vi må ringe for å generere den tilsvarende GNU Make Makefile. Det brukes mye, men flere og flere (inkludert meg selv) synes at det er for tungvint, vanskelig, tregt og ikke veldig kompatibelt.

Pros:

  • Svært konfigurerbar
  • Veldig utbredt

Cons:

  • Lav bærbarhet mellom ikke-UNIX-systemer
  • Utfør for mange tester (sjekk ALT, og ALT er ALT)
  • Veldig treg når du setter inn
  • Dårlig bakoverkompatibilitet

./configure && make

CUtfør

(Mitt favoritt system) CMake er et system som kommer til å kompensere for manglene ved Autotools i mange aspekter, for eksempel den forferdelige bakoverkompatibiliteten og bærbarheten. Forbedrer også testsystemet som er svært konfigurerbart for hvert prosjekt. Sannheten er at flere og flere prosjekter bruker CMake som KDE, PortAudio, Ogre3D, etc. Vi kan gjenkjenne denne typen systemer takket være en CMakeLists.txt-fil som vil generere en Makefile eller et prosjekt for Eclipse eller CodeBlocks

Pros:

  • Fast
  • Stor støtte på tvers av plattformer
  • Du kan definere testene på en veldig tilpassbar måte

Cons:

  • Vanskelig å forstå i begynnelsen
  • Du må jobbe med en abstraksjon som kan være skummel i begynnelsen
  • Lite spredning, selv om den vokser litt etter litt

cmake . && make

Q Lag

QMake er et system designet av Trolltech for å kompilere prosjekter laget i Qt. På denne måten legger qmake mye vekt på Qt og er vanligvis formatet som brukes av IDEer som QtCreator. Det er ganske populært i Qt-prosjekter, men det finnes ikke utenfor dette miljøet:

Pros:

  • Veldig godt integrert med Qt
  • Fast
  • God multiplatform innen Qt

Cons:

  • Mindre vanlig utenfor Qt-apper

qmake . && make

SCons

SCons er et Python-basert system for kompilering av C / C ++ -prosjekter. I motsetning til Autotools, CMake eller QMake; SCons bygger ikke en Makefile. SCons er veldig modifiserbart, men det er kanskje det tregeste i enkle operasjoner
Pros:

  • Enkel modifisering
  • Ta rettferdige tester

Cons:

  • Lite spredning
  • langsom

scons

Boost. Jam

Boost.Jam er en versjon av Perforce Jam som brukes i de populære C ++ Boost-bibliotekene, selv om kompileringssystemet kan brukes separat. I motsetning til GNU Make bruker Boost.Jam Jamfiles, som er en forbedret versjon av Makefiles. De er ganske populære i BeOS / Zeta / Haiku-miljøet.

Pros:

  • Fast
  • Den korteste å skrive

Cons:

  • Lite spredning
  • Vanskeligheter med å utføre tester

bjam

Ninja

Ninja er et system utviklet av Google for å gi et ultra-raskt byggesystem som opprinnelig var designet for å være det for Chromium-prosjektet. Ninja er ikke designet for å være enkelt å modifisere, ifølge sine egne forfattere, må det finnes et system som genererer Ninja. De anbefalte er CMake og gyp.

Pros:

  • Veldig fort

Cons:

  • Du trenger et annet system for å gyte Ninja
  • Lite spredning

ninja

andre

Du kan bruke hvilket som helst annet system, for eksempel ditt eget bash- eller python-skript. Det er også generatorer for andre språk som ikke er morsmål som kan brukes som Gradle, Maven, gyp, etc.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   abimaelmartell sa

    Make er ikke et kompilasjonssystem, det er en generator av binærfiler (eller mål) fra kildekoden. Den kan også brukes som oppgaveløper.

    Jeg skiller meg med deg at BSD-merket har bredere funksjonalitet, GNU-merket er mer komplett, det har mer funksjonalitet. Og jeg sier dette fra min egen erfaring, i BSD må jeg alltid installere GNU make fordi BSD make er veldig enkel sammenlignet med GNU make.

    Jeg er enig med deg i at Autotools er ganske tungvint, jeg foretrekker å bare bruke Makefile. Makefiler generert av Autotools er vanskelige å feilsøke.

    Greetings!

    1.    AdrianArroyoStreet sa

      Takk for kommentaren!
      Etter min mening har GNU-merke alltid vært mer tradisjonelt og tro mot det opprinnelige merkevareprogrammet, og BSD-merke har alltid vært mer innovativt, men det kan være at jeg har lagt merke til andre ting når jeg sammenlignet.

      Autotools er virkelig en stor hodepine. Som bidragsyter til Haiku-operativsystemet har jeg måttet portere programvare med autotools, og det er helvete. Det er ikke få tilfeller at jeg endte med å lage Makefile eller CMakeLists.txt før jeg fikset det rotet.

  2.   Chuck daniels sa

    Jeg bruker for øyeblikket Premake4, veldig konfigurerbar og enkel basert på Lua-skript. Ta en titt hvis du ikke vet det.
    Gratulerer med artikkelen, enkel og kortfattet, utmerket referanse.

  3.   bein sa

    'make check' brukes til å sjekke samlingen etter bruk av make
    Hilsener