różnica między „make clean” i „make distclean”


25

Z pomocą tej strony zainstalowałem ffmpeg ze źródeł. https://trac.ffmpeg.org/wiki/CentosCompilationGuide

Zauważyłem, że większość tych samouczków wywołuje make distcleanpóźniej make install. Ale tylko wywołania libvpx make cleanpo instalacji.

Zgodnie z tym dokumentem http://www.gnu.org/software/automake/manual/automake.html#Clean make clean usuwa wszystkie makeutworzone pliki i make distcleanusuwa wszystkie ./configureutworzone pliki .

oczyścić

Usuń z drzewa kompilacji pliki zbudowane przez make all.

uczynić dystylnym

Dodatkowo usuń wszystko, co zostało utworzone ./configure.

Rozumiem, że make distcleanwymaga to kolejnej instalacji, ale nie mogłem zrozumieć, dlaczego make cleanjest wywoływany po instalacji.

Zainstalowany ffmpeg działa bez problemu. Zadałem więc to pytanie, ponieważ chcę tylko poprawić swoją wiedzę na temat systemu Linux. Byłoby bardzo pomocne, gdyby ktoś mi to wyjaśnił.


2
Aby wyczyścić, nazywa się po instalacji. Nie ma potrzeby trzymania skompilowanych wersji w katalogu, w którym skompilowano, jeśli nadal masz zarówno źródło (i dzięki temu możesz je odtworzyć), jak i zainstalowany program.
Hennes,

Odpowiedzi:


27

Parametr użyty po makezależy tylko od programistów, którzy napisali Makefile. Dokumentacja, do której później się odwołujesz, Autotools, to tylko jeden z wielu sposobów na stworzenie Makefile.

Typowym standardem jest make cleanusuwanie wszystkich plików pośrednich i make distcleansprawia, że ​​drzewo jest tak, jak było wtedy, gdy nie było tarowane (lub coś bardzo blisko), w tym usuwanie wszelkich danych wyjściowych skryptu konfiguracyjnego. Tak działa na przykład jądro Linuksa.

Innymi słowy, jest całkowicie zależny od programistów dla każdej z tych bibliotek, i dlatego czasami tak jest, cleana innym razem distclean. Nawiasem mówiąc, nie trzeba uruchamiać clean/ distclean- Wydaje mi się, że uruchomili go tylko w celu zaoszczędzenia miejsca na dysku. make installzwykle kopiuje pliki do katalogu docelowego (ponownie zależne od programistów) - zwykle miejsca takie jak /usr/liblub /usr/bin(również określone przez skrypt konfiguracyjny, jeśli jest to system kompilacji Autotools)

Te niuanse są głównym powodem, dla którego ludzie używają systemów zarządzania pakietami, takich jak pakiety RPM lub Debian.


Główny powód, dla którego ludzie korzystają z pakietów binarnych? Co chcesz zaoszczędzić czas?
x-yuri

6

W moim rozumieniu jest to po prostu bezpieczne miejsce na dysku. Po skompilowaniu jakiegoś programu będziesz mieć wiele plików, np. Plików obiektowych, które nie są już potrzebne, ponieważ są one połączone razem w plikach binarnych. Wszystkie można odtworzyć, ponownie poświęcając trochę czasu procesora.

Weź ten przykład z bieżącym ffmpegkodem:

  • po klonowaniu gitrepozytorium źródło pobiera 53 160 kB
  • po uruchomieniu konfiguracji ma 53 632 kB
  • po kompilacji mamy ponad 10 razy wartość początkową: 673 668 kB
  • make clean zmniejsza to do 53 636 kB
  • i wreszcie, gdy make distcleanjesteśmy prawie na poziomie tuż po klonowaniu: 53 188 kB

2

Dlaczego krok libvpx używa make cleanzamiastmake distclean

W momencie pisania przewodnika libvpx nie miał żadnej reguły Makefiledotyczącej celu distclean, więc cleanzostał użyty.

Dlaczego make (dist)cleanjest uwzględniony pomake install

make distclean/ make cleanjest dołączany po make installprostu jako środek ostrożności, aby zapewnić „czyste konto” dla użytkowników, którzy wracają, zmieniają opcje konfiguracji i ponownie kompilują (co występowało częściej niż oczekiwano).

W poprzedniej wersji przewodnika kompilacji, bez profilaktyki make distclean, jeden z tych użytkowników czasami napotkał nieoczekiwane wyniki.

Co jeśli make distclean/ make cleandaje błąd?

Lubię to:

Makefile:198: Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.

albo to:

make: *** No rule to make target 'distclean'.  Stop.

Zignoruj ​​to. Oznacza to po prostu, że prawdopodobnie make distcleandwukrotnie pobiegłeś, co jest nieszkodliwe.


Warto zauważyć, że przewodnik używa teraz make distcleandla libvpx.
Hashim
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.