Systemy kompilacji. Oprócz prostej konfiguracji, tworzenia i instalacji

Wszystkie lub prawie wszystkie (a jeśli nie masz szczęścia) musieliśmy skompilować program z kodu źródłowego. Właściwie w większości projektów wystarczy wykonać ./configure && make && make install, aby zainstalować program, ale zobaczymy różne alternatywy:

Marka GNU

GNU Make to niskopoziomowy system kompilacji, kilka rzeczy jest konfigurowanych i nie są wykonywane żadne testy:

Plusy:

  • Bardzo rozpowszechniony
  • Proste do zrozumienia
  • Szybko

Wady:

  • Mało konfigurowalny
  • Trudne do utrzymania
  • Nie wykonuje testów

make

Marka BSD

BSD Make to kolejna wersja programu Make, obecnie używana w systemach operacyjnych * BSD. Różni się tym, że GNU Make jest najbardziej wszechstronnym programem BSD Make pod względem funkcjonalności, chociaż jest mniej rozpowszechniony.

Plusy:

  • Szybko
  • Proste do zrozumienia
  • Więcej funkcji niż GNU Make

Wady:

  • Niezbyt rozpowszechnione w świecie Linuksa
  • Nie wykonuje testów
  • Mało konfigurowalny
  • Trudne do utrzymania

make

Narzędzia automatyczne

Autotools jest oficjalnym systemem GNU i generuje skrypt o nazwie configure, który musimy wywołać, aby wygenerować odpowiedni plik GNU Make Makefile. Jest szeroko rozpowszechniony, jednak coraz więcej osób (łącznie ze mną) uważa, że ​​jest zbyt uciążliwy, trudny, powolny i niezbyt kompatybilny.

Plusy:

  • Wysoce konfigurowalny
  • Bardzo rozpowszechniony

Wady:

  • Mała przenośność między systemami innymi niż UNIX
  • Wykonaj zbyt wiele testów (sprawdź WSZYSTKO, a WSZYSTKO jest WSZYSTKIM)
  • Bardzo wolno podczas konfiguracji
  • Słaba kompatybilność wsteczna

./configure && make

CMake

(Mój ulubiony system) CMake to system, który ma nadrobić wady Autotools w wielu aspektach, takich jak straszna kompatybilność wsteczna i przenośność. Również ulepszenie systemu testowego, który jest wysoce konfigurowalny dla potrzeb każdego projektu. Prawda jest taka, że ​​coraz więcej projektów używa CMake, takich jak KDE, PortAudio, Ogre3D itp. Tego typu systemy możemy rozpoznać po pliku CMakeLists.txt, który wygeneruje Makefile lub projekt dla Eclipse lub CodeBlocks

Plusy:

  • Szybko
  • Świetne wsparcie dla wielu platform
  • Możesz zdefiniować testy w bardzo konfigurowalny sposób

Wady:

  • Na początku trudne do zrozumienia
  • Na początku musisz pracować z abstrakcją, która może być przerażająca
  • Mało rozprzestrzenia się, chociaż stopniowo rośnie

cmake . && make

Q Marka

QMake to system zaprojektowany przez Trolltech do kompilacji projektów wykonanych w Qt. W ten sposób qmake kładzie duży nacisk na Qt i jest zwykle formatem używanym przez IDE, takie jak QtCreator. Jest dość popularny w projektach Qt, ale nie można go znaleźć poza tym środowiskiem:

Plusy:

  • Bardzo dobrze zintegrowany z Qt
  • Szybko
  • Dobra multiplatforma w Qt

Wady:

  • Rzadkie poza aplikacjami Qt

qmake . && make

Scons

SCons to oparty na Pythonie system do kompilowania projektów C / C ++. W przeciwieństwie do Autotools, CMake lub QMake; SCons nie tworzy pliku Makefile. SCons jest bardzo modyfikowalny, ale prawdopodobnie działa najwolniej w prostych operacjach
Plusy:

  • Łatwa modyfikacja
  • Zrób uczciwe testy

Wady:

  • Mała rozpiętość
  • Powoli

scons

Wzmocnij dżem

Boost.Jam to wersja Perforce Jam, która jest używana w popularnych bibliotekach C ++ Boost, chociaż system kompilacji może być używany osobno. W przeciwieństwie do GNU Make, Boost.Jam używa Jamfiles, które są ulepszoną wersją Makefiles. Są dość popularne w środowisku BeOS / Zeta / Haiku.

Plusy:

  • Szybko
  • Najkrócej pisać

Wady:

  • Mała rozpiętość
  • Trudności w wykonywaniu testów

bjam

Ninja

Ninja to system opracowany przez Google w celu zapewnienia ultraszybkiego systemu kompilacji, pierwotnie zaprojektowanego na potrzeby projektu Chromium. Ninja nie jest zaprojektowana tak, aby była łatwa do modyfikacji, według jego autorów należy znaleźć system generujący Ninja. Zalecane to CMake i gyp.

Plusy:

  • Bardzo szybki

Wady:

  • Potrzebujesz innego systemu, aby odrodzić Ninja
  • Mała rozpiętość

ninja

inni

Możesz użyć dowolnego innego systemu, takiego jak własny skrypt bash lub python. Istnieją również generatory dla innych języków obcych, których można używać, takich jak Gradle, Maven, gyp itp.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Abimaelmartel powiedział

    Make nie jest systemem kompilacji, jest generatorem plików binarnych (lub celów) z kodu źródłowego. Może być również używany jako narzędzie do uruchamiania zadań.

    Różnię się od ciebie tym, że marka BSD jest bardziej wszechstronna pod względem funkcjonalności, marka GNU jest bardziej kompletna, ma więcej funkcji. I mówię to z własnego doświadczenia, w BSD zawsze muszę instalować GNU make, ponieważ BSD make jest bardzo proste w porównaniu z GNU make.

    Zgadzam się z Tobą, że Autotools jest dość uciążliwy, wolę po prostu używać Makefile. Pliki Makefile generowane przez Autotools są trudne do debugowania.

    Pozdrowienia!

    1.    AdrianArroyoStreet powiedział

      Dzięki za komentarz!
      Moim zdaniem GNU make zawsze było bardziej tradycyjne i wierne oryginalnemu make, a BSD zawsze było bardziej innowacyjne, ale być może podczas porównywania zauważyłem inne rzeczy.

      Autotools to naprawdę duży ból głowy. Jako współtwórca systemu operacyjnego Haiku musiałem portować oprogramowanie z automatycznymi narzędziami i to jest piekło. Jest kilka przypadków, w których utworzyłem Makefile lub CMakeLists.txt przed naprawieniem tego bałaganu.

  2.   Chucka Danielsa powiedział

    Obecnie używam Premake4, bardzo konfigurowalnego i prostego w oparciu o skrypty Lua. Spójrz, jeśli tego nie wiesz.
    Gratulujemy artykułu, proste i zwięzłe, doskonałe odniesienie.

  3.   Kości powiedział

    'make check' służy do sprawdzania kompilacji po użyciu make
    Pozdrowienia