Po co używać skryptu make over powłoki?

Make wydaje mi się po prostu skryptem powłoki z nieco łatwiejszą obsługą argumentów linii poleceń.

Dlaczego standardem jest uruchamianie make zamiast. /make.sh

Author: HoboBen, 2010-09-26

5 answers

Ogólna idea jest taka, że make obsługuje (w miarę) Minimalne przebudowy - tzn. mówi się, które części programu zależą od innych części. Kiedy aktualizujesz jakąś część programu, to Tylko przebudowuje części, które od tego zależą. Podczas gdy Można zrobić to za pomocą skryptu powłoki, byłoby to dużo więcej pracy (jawne sprawdzanie dat ostatnio zmodyfikowanych na wszystkich plikach, itp.) Jedyną oczywistą alternatywą dla skryptu powłoki jest odbudowanie wszystkiego co czas. 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ąc make, możesz łatwo osiągnąć to samo w minutę lub dwie...

 85
Author: Jerry Coffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-26 16:05:07

Marka jest system ekspercki

Są różne rzeczy, które są trudne do zrobienia ze skryptami powłoki...

  • oczywiście sprawdza, co jest nieaktualne, aby zbudować tylko to, czego potrzebuje do zbudowania
  • wykonuje sortowanie topologiczne albo jakiś inny rodzaj analizy drzewa, który określa, co zależy od czego i w jakiej kolejności budować nieaktualne rzeczy tak, że każdy warunek jest zbudowany przed każdą zależnością i tylko raz.
  • to język dla programowanie deklaratywne. Nowe elementy mogą być dodawane bez konieczności łączenia ich w imperatywny przepływ sterowania.
  • zawiera silnik wnioskowania aby przetwarzać reguły, wzorce i daty, i to, w połączeniu z regułami w danym pliku Makefile, jest to, co zamienia make W system ekspercki.
  • ma procesor makro.
  • Zobacz: wcześniejsze podsumowanie marki.
 48
Author: DigitalRoss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:25

Make zapewnia, że tylko wymagane pliki są rekompilowane podczas wprowadzania zmian w plikach źródłowych.

Na przykład:

final : 1.o 2.o
    gcc -o final 1.o 2.o

1.o : 1.c 2.h
    gcc -c 1.c

2.o : 2.c 2.h
    gcc -c 2.c

Jeśli zmienię tylko plik 2.h & Uruchom make, wykona on wszystkie 3 polecenia w odwrotnej kolejności.

Jeśli zmienię tylko plik 1.c & Uruchom make, wykonuje on 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 dużo if/else sprawdzania.

 7
Author: Chris Dodd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-26 16:57:44

Podobnie jak wyżej, Make jest deklaratywnym (- owskim) językiem programowania równoległego.

Załóżmy, że masz 4000 plików graficznych do konwersji i 4 Procesory. Spróbuj napisać 10-liniowy skrypt powłoki (jestem Hojny tutaj), który zrobi to niezawodnie podczas nasycania procesorów.

Być może prawdziwym pytaniem jest, dlaczego ludzie trudzą się pisaniem skryptów powłoki.

 7
Author: bobbogo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-01 17:53:04

Make handles dependencies: Makefile je opisuje: 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, aby określić, co należy ponownie skompilować.

Można wywołać bezpośrednio jeden cel, aby nie budować wszystkiego opisanego w pliku Makefile.

Ponadto składnia make zapewnia podstawienie, vpath

Wszystko to można zapisać w skryptach powłoki, dzięki czemu już weź to.

 3
Author: philant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-26 16:09:09