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.
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!
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.
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.
'make check' służy do sprawdzania kompilacji po użyciu make
Pozdrowienia