Czy istnieje ogólna zasada określająca, kiedy należy używać „make clean” zamiast po prostu „make”?


11

Piszę teraz program składający się z wielu plików i najwyraźniej uruchamiam tylko polecenie „make” (jak można by intuicyjnie sądzić, że należy zrobić w większości sytuacji) z jakiegoś powodu powoduje awarię mojego programu. Wydaje mi się, że mogę podać więcej szczegółów na temat problemu, ale ważne jest to, że działa on przy użyciu polecenia „make clean”. Zastanawiałem się więc, czy ktokolwiek znał ogólną ogólną zasadę działania „wyczyść” zamiast po prostu „zrobić”

Odpowiedzi:


17

Czyścisz w dwóch sytuacjach - gdy chcesz spakować kod źródłowy (a zatem nie potrzebujesz / nie chcesz zbudować obiektów) LUB, gdy masz powód, by sądzić, że zbudowane obiekty są złe.

W twoim przypadku używasz opcji „oczyść”, aby rozwiązać problem, który prawdopodobnie jest wynikiem wadliwego pliku Makefile. Coś tam nie kompiluje się ponownie, kiedy powinno, a to powoduje, że wyjściowy plik binarny jest zły.

Istnieje wiele przyczyn, które mogą się zdarzyć, w zależności od złożoności projektu i sposobu jego wykorzystania, ale jego sedno jest następujące: musisz poświęcić trochę czasu na debugowanie pliku Makefile.


6
Zapominasz o „pewnych zmianach w środowisku kompilacji”, takich jak uaktualniony kompilator, nowe wersje bibliotek itp. Zawsze dobrym pomysłem jest „wyczyścić” w tych przypadkach, aby upewnić się, że wszystkie moduły śpiewają z tego samego arkusza!
James Anderson

2
@JamesAnderson Można argumentować, że są to po prostu błędne pliki Makefile.
Kristof Provost

4
@KristofProvost: Nie jestem pewien, czy nazwałbym „New ABI” (być może poprzez wprowadzenie nowej wersji kompilatora) „błędnym Makefile”. Wystarczająco wykracza poza zakres tego, na co spodziewałbym się „zrobić”.
Vatine

1
To prawda, ale możliwe jest (i wcale nie takie trudne) dodanie kompilatora do plików makefile jako warunek wstępny. To wystarczy, aby złapać problem. Podsumowując, nie jest to ogromny problem, a mimo to bardzo rzadki. Zwróciłem na to uwagę, ponieważ użyłem (i napisałem) plików makefile, które uwzględniają flagi kompilatora i tym podobne. Jest to również dość rzadkie w plikach makefiles, ale bardzo przydatne (bardziej niż sprawdzanie kompilatora;)). Moje oczekiwania dotyczące dobrych, dobrze napisanych plików makefile są dość wysokie. Moje oczekiwania dotyczące średniego makefile są raczej niższe ...
Kristof Provost

8

Zgadzam się z odpowiedzią Michaela Kohne'a w ogóle. Dodam, że musisz przeczytać dokumentację instalacyjną, aby wiedzieć, co właściwie robi „uprzątnij”. Mogą istnieć różne poziomy czystości, które mogą być potrzebne, na przykład „make realclean” i „make distclean”. Istnieją nieformalne konwencje, ale nic nie jest wyryte w kamieniu.


2
+1: „musisz przeczytać dokumenty instalacyjne, aby wiedzieć, co faktycznie robi„ czyść ”. Nie ma „ogólnej zasady”. Musisz przeczytać dokumenty.
S.Lott,

5

Rozumiem, że to twój projekt, więc to twój makefile. Moim celem jest, aby make zawsze produkować poprawną kompilację, jeśli jest to możliwe. Jeśli make cleankonieczne jest wyleczenie się z jakiegoś stanu, to moim zdaniem makefilejest to niewłaściwe i powinno zostać poprawione. Jeśli twoje zależności zostały poprawnie obliczone, prosty makepowinien zrekompilować wszystko, co wymaga ponownej kompilacji.


2
Zgadzam się. W dzisiejszych czasach prawie nieskończonego miejsca na dysku nie jest już problemem, ale jestem wystarczająco stary, aby pamiętać, kiedy make clean i realclean były używane głównie do oszczędzania miejsca na dysku po utworzeniu połączonego pliku wykonywalnego. Tworzenie GCC, apache, perl itp. Pozostawiło wiele rzeczy dookoła.
Bill Ruppert,

1

Przed nocną kompilacją biegałbym „czyścić”. W takim przypadku dodatkowy czas potrzebny na wykonanie pełnej kompilacji prawdopodobnie nie będzie miał większego znaczenia, ale dodatkowe bezpieczeństwo wynikające z upewnienia się, że wszystko jest w odpowiedniej wersji, prawdopodobnie jest tego warte.


Będzie to zależeć od wielkości twojego projektu. Tam, gdzie używam do pracy, przyrostowa kompilacja zajęłaby 2-4 godziny, a zmiany z innych witryn zostały wprowadzone z dnia na dzień. Czysta kompilacja może zająć od 7 do 9 godzin. Ponadto czasami mieliśmy 2 lub 3 gałęzie, które chcielibyśmy zbudować. Nawet na szybkich komputerach bardzo duże bazy kodu muszą być traktowane zupełnie inaczej niż mniejsze.
TafT,
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.