Make wydaje mi się po prostu skryptem powłoki z nieco łatwiejszą obsługą argumentów wiersza poleceń.
Dlaczego standardowo uruchamia się make zamiast ./make.sh
shell
makefile
compilation
HoboBen
źródło
źródło
Odpowiedzi:
Ogólny pomysł jest taki, że
make
obsługuje (rozsądnie) minimalne przebudowy - tj. Mówisz mu, które części programu zależą od innych części. Kiedy aktualizujesz jakąś część programu, odbudowuje on tylko te części, które od tego zależą. Chociaż można by to zrobić za pomocą skryptu powłoki, wymagałoby to znacznie więcej pracy (jawne sprawdzenie dat ostatniej modyfikacji we wszystkich plikach itp.). Jedyną oczywistą alternatywą dla skryptu powłoki jest przebudowa wszystkiego za każdym razem. W przypadku małych projektów jest to całkowicie rozsądne podejście, ale w przypadku dużego projektu całkowita przebudowa może z łatwością zająć godzinę lub więcej - używającmake
, możesz łatwo osiągnąć to samo w minutę lub dwie ...Powinienem też chyba dodać, że jest sporo alternatyw, które mają co najmniej ogólnie podobne możliwości. Zwłaszcza w przypadkach, gdy odbudowywanych jest tylko kilka plików w dużym projekcie, niektóre z nich (np. Ninja ) są często znacznie szybsze niż make.
źródło
Marka to system ekspercki
Jest wiele rzeczy, które są trudne do zrobienia ze skryptami powłoki ...
źródło
Make zapewnia, że tylko wymagane pliki zostaną ponownie skompilowane podczas wprowadzania zmian w plikach źródłowych.
Na przykład:
Jeśli zmienię
2.h
tylko plik i uruchomięmake
, wykonuje wszystkie 3 polecenia w odwrotnej kolejności.Jeśli zmienię
1.c
tylko plik i uruchomięmake
, wykonuje tylko pierwsze 2 polecenia w odwrotnej kolejności.Próba osiągnięcia tego za pomocą własnego skryptu powłoki będzie wymagała wielu
if/else
sprawdzeń.źródło
rsync -r -c -I $SOURCE $DEST_DIR
w powłoce.Oprócz powyższego, Make jest deklaratywnym (-ish) językiem programowania równoległego.
Powiedzmy, że masz 4000 plików graficznych do konwersji i 4 procesory. Spróbuj napisać 10-liniowy skrypt powłoki (jestem tutaj hojny), który zrobi to niezawodnie podczas nasycania procesorów.
Być może prawdziwe pytanie brzmi: dlaczego ludzie zawracają sobie głowę pisaniem skryptów powłoki.
źródło
tworzyć zależności uchwytów: plik makefile opisuje je: plik binarny zależy od plików obiektowych, każdy plik obiektowy zależy od pliku źródłowego i nagłówków ... po uruchomieniu make, data plików jest porównywana w celu określenia, co należy ponownie skompilować .
Można bezpośrednio wywołać jeden cel, aby nie budować wszystkiego, co opisano w pliku Makefile.
Ponadto składnia make zapewnia podstawianie, vpath
Wszystko to można napisać w skryptach powłoki, dzięki czemu już to masz.
źródło