Jest to polecenie makepp_build_cache_control, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS
PROGRAM:
IMIĘ
makepp_build_cache — Jak skonfigurować i używać pamięci podręcznych kompilacji
OPIS
C: czysty,
Stwórz, M: makepp_build_cache_control,
mppbcc, S: pokazać,
statystyki
A budować Pamięć podręczna to katalog zawierający kopie poprzednich celów, które już makepp
wybudowany. Kiedy makepp zostaje poproszony o zbudowanie nowego celu, sprawdza, czy już go zbudował
gdzieś indziej na tych samych warunkach, a jeśli tak, po prostu linkuj lub kopiuj zamiast tego
odbudowując go.
Pamięć podręczna kompilacji może być przydatna w następujących okolicznościach:
· Pracujesz nad programem i kompilujesz go zoptymalizowanie. Następnie odkrywasz błąd,
i skompiluj całość w trybie debugowania. Znalazłeś błąd i teraz chcesz
skompiluj go ponownie w trybie zoptymalizowanym. Większość plików będzie identyczna. Jeśli użyłeś A
zbuduj pamięć podręczną we wszystkich swoich kompilacjach, makepp po prostu pobierze niezmienione pliki
z pamięci podręcznej kompilacji, zamiast je ponownie kompilować.
Podobna sytuacja ma miejsce, jeśli normalnie pracujesz na jednej architekturze, ale na chwilę się na nią przełączasz
inną architekturę, a następnie przełączasz się z powrotem. Jeśli stare pliki nadal znajdują się w formacie
buduj pamięć podręczną, makepp nie będzie musiał niczego rekompilować.
· Pobrałeś kilka kopii konkretnego programu ze swojej kontroli wersji
system i dokonaliśmy różnych zmian w każdej hierarchii katalogów. (Np. jesteś
rozwiązywanie różnych błędów w różnych hierarchiach katalogów.) Większość plików będzie
identyczne w obu hierarchiach katalogów. Jeśli zbudujesz oba z pamięcią podręczną kompilacji, plik
build w drugiej hierarchii katalogów będzie mógł po prostu skopiować pliki z
buduj pamięć podręczną zamiast rekompilować te same pliki.
· Kilku programistów pracuje nad tym samym zestawem źródeł. Każdy deweloper jest
wprowadzanie zmian, ale większość plików jest identyczna między programistami. Jeśli wszystkie
programiści dzielą pamięć podręczną kompilacji, to jeśli kompilacja jednego programisty kompiluje plik, dowolny
kompilacja innego programisty, która musi skompilować identyczny plik (z tym samym plikiem
zawiera itp.) może po prostu skopiować plik z pamięci podręcznej zamiast ponownie uruchamiać kompilację.
Pamięć podręczna kompilacji może być pomocna, jeśli spełnione są wszystkie poniższe warunki:
· Masz dużo miejsca na dysku. Zwykle makepp kończy się buforowaniem wielu kopii
każdy plik, który się zmienia, ponieważ nie ma pojęcia, które z nich zostaną faktycznie użyte.
Możesz wyłączyć pamięć podręczną kompilacji dla niektórych plików, ale jeśli pamięć podręczna kompilacji ma to zrobić
w ogóle będzie przydatny, prawdopodobnie będzie musiał zawierać wiele plików.
· Tworzenie plików trwa znacznie dłużej niż kopiowanie. Jeśli pamięć podręczna kompilacji znajduje się na
w tym samym systemie plików, makepp spróbuje użyć twardych linków, zamiast kopiować plik.
Makepp musi połączyć lub skopiować plik do pamięci podręcznej podczas budowania pliku, a następnie go
musi połączyć lub skopiować plik z pamięci podręcznej, gdy jest on ponownie wymagany. Ponadto,
sprawdzanie, czy potrzebny plik faktycznie się znajduje, wiąże się z niewielkim nakładem pracy
pamięć podręczną kompilacji i kopiowanie informacji o kompilacji o pliku, a także o pliku
sama.
Może się na przykład okazać, że używanie pamięci podręcznej kompilacji nie jest tego warte w przypadku kompilacji
małe moduły. Prawie na pewno nie warto, aby polecenia powodowały statyczność
biblioteka (plik archiwum, libxyz.a), chyba że używasz łączy w celu zaoszczędzenia miejsca na dysku.
· Istnieje duże prawdopodobieństwo, że niektóre pliki będą potrzebne ponownie w innym
kompilacja. Jeśli kompilujesz oprogramowanie tylko raz, możesz zbudować pamięć podręczną
tylko spowalniają.
Korzystanie z pamięci podręcznej kompilacji wymaga pewnych prac konfiguracyjnych i konserwacyjnych. Proszę nie
spróbuj użyć pamięci podręcznej kompilacji, dopóki nie zrozumiesz, jak one działają, jak je utworzyć i jak to zrobić
chroń je przed ciągłym wzrostem i pożeraniem całego dostępnego miejsca na dysku
pomimo napiętego harmonogramu
W jaki sposób a budować Pamięć podręczna działa
Jeśli włączysz pamięć podręczną kompilacji, za każdym razem, gdy tworzony jest plik, makepp przechowuje kopię w pliku
zbuduj pamięć podręczną. Nazwa pliku to klucz będący skrótem sum kontrolnych wszystkich plików
Wejścia i polecenie kompilacji i architektura. Następnym razem Makep
pliku, sprawdza, czy w pamięci podręcznej kompilacji znajduje się już plik z tymi samymi sumami kontrolnymi.
Jeśli tak, plik jest kopiowany z pamięci podręcznej kompilacji.
Aby zwiększyć wydajność, jeśli pamięć podręczna kompilacji znajduje się w tym samym systemie plików co kompilacja, makepp
w rzeczywistości nie skopiuje pliku; zamiast tego utworzy twarde łącze. To jest szybsze i
nie zajmuje dodatkowego miejsca na dysku. Podobnie, gdy makepp chce wyciągnąć plik z
pamięci podręcznej kompilacji, jeśli to możliwe, użyje twardego łącza lub skopiuje go, jeśli to konieczne.
UWAGA: Makepp nigdy usuwa pliki z pamięci podręcznej kompilacji, chyba że zostanie o to wyraźnie poproszony.
Oznacza to, że pamięć podręczna kompilacji będzie nadal rosła bez ograniczeń, chyba że ją wyczyścisz
aktualizować je okresowo (szczegóły poniżej).
Buduj pamięci podręczne i repozytoria
Tworzenie pamięci podręcznych i repozytoriów (zobacz makepp_repositories) może rozwiązać podobne problemy. Dla
w niektórych sytuacjach bardziej odpowiednie jest repozytorium, podczas gdy w innych bardziej odpowiednia jest pamięć podręczna kompilacji
właściwe.
Możesz także połączyć jedno i drugie. Jeśli masz ogromną strukturę katalogów z dużą ilością plików
źródeł, których kopię nie powinien mieć każdy programista, możesz je udostępnić
jako repozytorium. Wygenerowane pliki, z różnymi opcjami debugowania itp., można następnie zapisać
zarządzane bardziej elastycznie poprzez pamięć podręczną kompilacji.
Kluczowe różnice między pamięcią podręczną kompilacji a repozytorium to:
· Pamięć podręczna kompilacji może przechowywać tylko pliki utworzone przez procedurę kompilacji. Repozytorium może
mają również oryginalne pliki źródłowe.
· Pliki w repozytorium powinny nie zmieniać się w trakcie budowy. Pamięć podręczna kompilacji
nie ma takiego ograniczenia.
· Pliki w repozytorium muszą znajdować się w tym samym względnym położeniu, co pliki w repozytorium
katalog kompilacji. Np. jeśli makepp potrzebuje pliku podkatalog1/podkatalog2/xyz.abc, potem to
tylko patrzy na katalog_główny_repozytorium/katalog_podrzędny1/katalog_podrzędny2/xyz.abc. Pliki w pamięci podręcznej kompilacji mają
utraciły wszystkie informacje o hierarchii katalogów i są przeszukiwane wyłącznie na podstawie danych wejściowych
i polecenie potrzebne do ich wytworzenia.
· Pliki w repozytorium są miękko łączone z nowymi lokalizacjami w kompilacji
katalogi. Pliki w pamięci podręcznej kompilacji są albo kopiowane, albo dołączane na stałe do nowych
lokalizacje. Jeśli konieczna będzie kopia, repozytorium z pewnością będzie szybsze.
· Budowa pamięci podręcznej kosztują trochę czasu na umieszczenie w nich plików. Repozytorium nie ma
wszelkie dodatkowe koszty (w przypadku bieżącego przebiegu, to znaczy oczywiście istniał koszt stworzenia
To wcześniej), ale często wymaga nieco większego planowania.
Ogólnie rzecz biorąc, repozytorium jest bardziej przydatne, jeśli masz jedną centralną kompilację, którą chcesz
wszyscy programiści, od których można pobierać pliki. Pamięć podręczna kompilacji jest tym, czego chcesz, jeśli masz
zdecentralizowany system, w którym jeden programista powinien pożyczać skompilowane pliki od innego
deweloper.
Zarówno pamięci podręczne kompilacji, jak i repozytoria mogą pomóc w kompilacjach wariantowych. Na przykład, jeśli chcesz
skompilować wszystkie zoptymalizowane źródła, następnie ponownie z debugowaniem i ponownie zoptymalizowane,
Możesz uniknąć ponownego ponownego optymalizacji wszystkich zoptymalizowanych plików za pomocą repozytorium lub
zbuduj pamięć podręczną. Aby to zrobić z repozytorium, musisz myśleć z wyprzedzeniem i wyraźnie to powiedzieć
makepp, aby użyć repozytorium do kompilacji debugowania, w przeciwnym razie usunie plik
wstępna zoptymalizowana kompilacja. Dzięki pamięci podręcznej kompilacji makepp kontynuuje i usuwa plik
wstępnie zoptymalizowana kompilacja, ale można ją szybko odzyskać.
Buduj Pamięć podręczna grupowanie
Grupa to luźne połączenie pamięci podręcznych kompilacji. Jest luźny w tym sensie, że makepp nie
sobie z tym poradzić, aby nie spowalniać zarządzania pamięcią podręczną kompilacji. Aby z tego skorzystać
musisz skorzystać z narzędzia offline. Warto zauważyć, że polecenie „wyczyść” powoduje również wykonanie
replikacja. Jeśli podasz nierealistyczne kryterium czyszczenia, np. „--mtime=+1000”, nie
następuje czyszczenie, tylko replikacja.
Grupowanie umożliwia udostępnianie plików większej liczbie osób, zwłaszcza jeśli masz pamięć podręczną kompilacji
na dyskach programistów, aby skorzystać z twardego linkowania, co oszczędza czas przesyłania i
miejsca na dysku. Samo twarde linkowanie ogranicza się jednak do korzyści przypadających na dysk.
W przypadku grupowania plik zostanie zreplikowany po pewnym czasie od przesłania go do pliku przez makepp
zbuduj pamięć podręczną. Oznacza to, że plik zostanie utworzony tylko raz dla wszystkich dysków razem.
W systemach plików, które umożliwiają twarde dowiązania do dowiązań symbolicznych - co wydaje się ograniczone
Linux i Solaris – plik będzie dodatkowo fizycznie obecny tylko na jednym dysku.
Dodatkowo pozostaje na każdym dysku, na którym został utworzony przed replikacją, ale tylko jako
tak długo, jak jest on używany na tych dyskach. W tym scenariuszu z dowiązaniami symbolicznymi możesz wybrać jedno lub
więcej systemów plików, w których wolisz fizycznie przechowywać swoje pliki. Miej świadomość, że
pomyślnie zbudowane pliki mogą stać się niedostępne, jeśli dysk, na którym się znajdują, fizycznie przestanie działać
nieaktywny. Odbudowa rozwiąże ten problem, a wpływ można zmniejszyć poprzez rozłożenie
pliki na kilku preferowanych dyskach.
Replikacja ma kilka interesujących zastosowań:
NFS (możliwe również z kopiowaniem)
Masz centralny serwer NFS, który zapewnia preferowaną pamięć podręczną kompilacji. Każda maszyna
a dysk programisty ma lokalną pamięć podręczną kompilacji umożliwiającą szybkie przesyłanie. Albo wsiądziesz z powrotem
wszystkie dyski programistyczne do serwera NFS i wykonaj replikację i czyszczenie
centralnie lub replikujesz lokalnie na każdym komputerze klienckim NFS, traktując tylko część
widocznej tam grupy.
Niebezpieczny dysk (możliwe również przy kopiowaniu)
Jeśli kompilujesz na dysku RAM (miejmy nadzieję, że edytujesz źródła w repozytorium na sejfie
dysk), możesz ustawić dyski bezpieczne jako preferowane. Wtedy nastąpi replikacja
migruj pliki na bezpieczne dyski, gdzie przetrwają ponowne uruchomienie. Po każdym ponownym uruchomieniu
będziesz musiał odtworzyć pamięć podręczną kompilacji dysku RAM i dodać ją do grupy (co będzie
dać ostrzeżenie, w tym przypadku nieszkodliwe, ponieważ pozostali członkowie grupy wciąż pamiętają
to).
Pełny dysk (twarde łącze tylko do dowiązań symbolicznych)
Jeśli jeden z dysków jest notorycznie pełny, możesz utworzyć pamięć podręczną kompilacji na wszystkich
preferowane są inne dyski. W ten sposób replikacja przeprowadzi migrację plików z
pełny dysk, losowo do dowolnego innego.
W jaki sposób do posługiwać się a budować Pamięć podręczna
W jaki sposób do powiedzieć makijaż do posługiwać się dotychczasowy budować Pamięć podręczna
Po utworzeniu pamięci podręcznej kompilacji jest ona teraz dostępna dla makepp. Istnieje kilka
opcje, które możesz określić podczas tworzenia; Aby uzyskać szczegółowe informacje, zobacz „Jak zarządzać pamięcią podręczną kompilacji”.
Pamięć podręczną kompilacji określa się za pomocą opcji wiersza poleceń --build-cache z rozszerzeniem
instrukcja build_cache w pliku makefile lub za pomocą modyfikatora reguły :build_cache.
Najbardziej przydatne sposoby pracy z pamięciami podręcznymi kompilacji, jakie do tej pory znalazłem, to:
· Ustaw ścieżkę pamięci podręcznej kompilacji w zmiennej środowiskowej MAKEPPFLAGS w ten sposób (najpierw
wariant dla Korn Shell lub bash, drugi dla csh):
eksport MAKEPPFLAGS=--build-cache=/ścieżka/do/kompilacji/cache
setenv MAKEPPFLAGS --build-cache=/ścieżka/do/kompilacji/cache
Teraz każda uruchomiona kompilacja będzie zawsze korzystać z tej pamięci podręcznej kompilacji i nie jest to konieczne
modyfikować cokolwiek innego.
· Określ pamięć podręczną kompilacji w plikach makefile za pomocą linii takiej jak ta:
BUILD_CACHE := /ścieżka/do/build_cache
build_cache $(BUILD_CACHE)
Musisz umieścić to we wszystkich plikach make, które korzystają z pamięci podręcznej kompilacji (lub we wspólnym pliku include
plik, którego używają wszystkie pliki makefile). Lub umieść to w swoim Plik rootMakepp:
BUILD_CACHE := /ścieżka/do/build_cache
globalna pamięć podręczna kompilacji $(BUILD_CACHE)
Na komputerze z wieloma użytkownikami możesz skonfigurować jedną pamięć podręczną kompilacji na każdy dysk domowy
zaleta linków. Być może wygodniej będzie Ci użyć takiego stwierdzenia:
build_cache $(znajdź_w górę nasza_build_cache)
który przeszukuje w górę od bieżącego katalogu w bieżącym systemie plików, aż do niego
znajduje katalog o nazwie nasza_kompilacja_cache. To może być to samo stwierdzenie dla wszystkich
użytkowników i nadal indywidualnie wskazują pamięć podręczną na swoim dysku.
Solaris 10 może wykonać fantazyjne ponowne montowanie katalogów domowych. Twój dom to zrobi
najwyraźniej być własnym punktem montowania, zwanym /Dom/$NAZWALOGU, kiedy w rzeczywistości jest włączony
Jednym z /eksport/dom* dyski obok dysków innych użytkowników. Ponieważ tak nie jest
naprawdę oddzielny system plików, linki nadal działają. Ale nie możesz szukać w górę.
Zamiast tego możesz zrobić:
BUILD_CACHE := ${makeperl }
Buduj pamięci podręczne i podpisów
Makepp wyszukuje pliki w pamięci podręcznej kompilacji według ich podpisów. Jeśli używasz
domyślna metoda podpisu (data pliku + rozmiar), makepp będzie pobierał tylko pliki z
buduj pamięć podręczną, jeśli data plików wejściowych jest identyczna. W zależności od tego, jak budujesz
działa, daty plików mogą nigdy nie być identyczne. Na przykład, jeśli wyewidencjonujesz pliki w
dwie różne hierarchie katalogów, datami plików będzie prawdopodobnie godzina, którą sprawdziłeś
plików, a nie czas ich wpisania (oczywiście w zależności od twojego
oprogramowanie do kontroli wersji).
Prawdopodobnie chcesz wyciągnąć pliki z pamięci podręcznej kompilacji, jeśli plik treść jest
identyczne, niezależnie od daty. W takim przypadku powinieneś użyć jakiegoś rodzaju
podpis merytoryczny. Makepp robi to domyślnie dla kompilacji C i C++, ale tak jest
używa dat plików w przypadku innych rodzajów plików (np. plików obiektowych lub innych plików w formacie
proces kompilacji nie jest specjalnie rozpoznawany jako źródło C lub plik dołączany). Jeśli chcesz
inne rodzaje plików do pracy z pamięcią podręczną kompilacji (tzn. jeśli chcesz, aby z nią współpracowało
cokolwiek innego niż polecenia kompilacji C/C++), możesz umieścić taką instrukcję
gdzieś w górnej części pliku makefile:
podpis md5
aby zmusić Makepp do używania podpisów na podstawie zawartości plików, a nie ich daty.
W jaki sposób nie do Pamięć podręczna pewien pliki
Mogą istnieć pewne pliki, o których wiesz, że nigdy nie będziesz chciał buforować. Na przykład, jeśli
osadzasz datownik w pliku, wiesz, że nigdy, pod żadnym pozorem, tego nie zrobisz
chcesz pobrać poprzednią kopię pliku z pamięci podręcznej kompilacji, ponieważ sygnatura daty
jest inny. W takim przypadku kopiowanie go do pliku jest tylko stratą czasu i miejsca na dysku
zbuduj pamięć podręczną.
Możesz też pomyśleć, że jest bardzo mało prawdopodobne, że będziesz chciał buforować ostateczny plik wykonywalny.
Możesz chcieć buforować pojedyncze obiekty lub obiekty współdzielone, które są wykorzystywane do tworzenia
wykonywalny, ale często jest mało prawdopodobne, że zbudujesz plik dokładnie identiques
wykonywalny z identycznych wejść. Ponownie, w tym przypadku używanie pamięci podręcznej kompilacji jest stratą czasu
miejsca na dysku i czasu, więc warto go wyłączyć.
Czasami wygenerowanie pliku może być niezwykle szybkie i umieszczanie go w nim jest po prostu stratą czasu
pamięć podręczną kompilacji, ponieważ można ją wygenerować tak szybko, jak skopiowano. Może chcesz
selektywnie wyłącz buforowanie tych plików.
Możesz wyłączyć pamięć podręczną kompilacji dla określonych reguł, określając „: build_cache none” w
taka zasada:
nasz_plik wykonywalny: dateStamp.o main.o */*.so
: build_cache brak
$(CC) $(LDFLAGS) $(wejścia) -o $(wyjście)
Ta flaga oznacza, że żadne dane wyjściowe tej konkretnej reguły nigdy nie zostaną umieszczone w pliku
kompilacji pamięci podręcznej, a makepp nigdy nie będzie próbował wyciągnąć ich z pamięci podręcznej kompilacji.
W jaki sposób do zarządzanie a budować Pamięć podręczna
makepp_build_cache_control komenda ...
mppbcc komenda ...
makepp_build_cache_control, mppbcc to narzędzie zarządzające pamięciami podręcznymi kompilacji dla makepp.
Co makepp_build_cache_control robi jest określane na podstawie pierwszego słowa argumentu.
W rzeczywistości ten mały skrypt jest opakowaniem następującego polecenia, co możesz chcieć
wywołaj bezpośrednio w zadaniach cron, gdzie może być potrzebna ścieżka do „makeppbuiltin”:
makeppbuiltin -MMpp::BuildCacheControl, polecenie ...
Możesz także użyć tych poleceń z pliku makefile po ich załadowaniu, z przedrostkiem „&” as
poniżej przykład „utwórz”:
perl { use Mpp::BuildCacheControl } # To moduł Perla, więc używaj go zamiast dołączać.
moja_cache:
&create $(CACHE_OPTIONS) $(wyjście) # Wywołaj załadowaną funkcję wbudowaną.
build_cache $(wstępna kompilacja my_cache)
Prawidłowe polecenia, które również wymagają kilku standardowych opcji opisanych w
makepp_builtins, to:
Stwórz [opcja ...] ścieżka/do/pamięci podręcznej ...
Tworzy pamięci podręczne kompilacji z podanymi opcjami. Prawidłowe opcje to:
Opcje standardowe: „-A, --args-file, --arguments-file=nazwa pliku, -v, --verbose”
-e grupa
--rozszerz=grupa
--extend-group=grupa
Dodaj nową pamięć podręczną kompilacji do „grupy”. Mogło to być pojedyncze stanowisko
zbuduj pamięć podręczną do tej pory.
-f
--siła
Pozwala to na utworzenie pamięci podręcznej nawet jeśli ścieżka/do/pamięci podręcznej już istniało. Jeśli było
plik, który zostanie usunięty. Jeśli był to katalog, zostanie on ponownie wykorzystany, z czymkolwiek
zawartość, jaką miał.
-p
--preferowane
Ta opcja ma znaczenie tylko wtedy, gdy w grupie masz kompilacje pamięci podręcznych, które na to pozwalają
twarde linkowanie do dowiązań symbolicznych. W takim przypadku czyszczenie spowoduje migrację elementów do
preferowany dysk. Dzięki tej opcji możesz utworzyć kilka pamięci podręcznych w grupie
w takim przypadku pliki zostaną do nich przeniesione losowo.
-s n1, n2,...
--subdir-chars=n1, n2,...
Kontroluje, ile poziomów podkatalogów jest tworzonych do przechowywania plików w pamięci podręcznej,
i ile plików będzie w każdym podkatalogu. Pierwszy n1 postacie
nazwapliku składa się z nazwy katalogu najwyższego poziomu i znaków z n1 do n2 Nasz formularz
nazwa katalogu drugiego poziomu i tak dalej.
Pliki w pamięci podręcznej kompilacji nazywane są przy użyciu skrótów MD5 danych używanych przez makepp, tzw
każda nazwa pliku składa się z 22 cyfr base64 plus oryginalna nazwa pliku. Jeśli pamięć podręczna kompilacji
nazwa pliku to 0123456789abcdef012345_module.o, faktycznie jest on przechowywany w pliku build
pamięć podręczna jako 01/23/456789abcdef012345_module.o jeśli podasz „--subdir-chars 2,4”.
W rzeczywistości „--subdir-chars 2,4” jest wartością domyślną, która dotyczy gigantycznej pamięci podręcznej kompilacji
maksymalnie 4096 katalogów z 416777216 podkatalogami. Nawet „--subdir-chars 1,2” lub
„--subdir-chars 1” zaprowadzi cię całkiem daleko. W systemie plików zoptymalizowanym pod kątem ogromnych plików
katalogi, w których możesz nawet powiedzieć „-s” lub „--subdir-chars=”, aby przechowywać wszystkie pliki
najwyższy poziom.
-m perms
--tryb=perms
--uprawnienia dostępu=perms
Określa uprawnienia dostępu do katalogu podczas dodawania plików do kompilacji
Pamięć podręczna. Jeśli chcesz, aby inne osoby umieszczały pliki w Twojej pamięci podręcznej kompilacji, musisz wykonać
jest zapisywalny w grupie lub na świecie. Uprawnienia należy określić w notacji ósemkowej.
Ponieważ są to uprawnienia do katalogów, jeśli udzielisz dostępu, musisz go również udzielić
wykonaj dostęp, w przeciwnym razie otrzymasz kilka dziwnych błędów. Oznacza to, że 0700
tylko ten użytkownik może mieć dostęp do tej pamięci podręcznej kompilacji. 0770 oznacza, że ten użytkownik i
każda osoba w grupie może mieć dostęp do zapisu w pamięci podręcznej kompilacji. 0777 to oznacza
każdy może mieć dostęp do pamięci podręcznej kompilacji. Rozsądne cyfry ósemkowe to 7
(zapis), 5 (odczyt) lub 0 (brak). Możliwe jest również 3 (zapis) lub 1 (odczyt), co pozwala
pamięć podręczną do wykorzystania, ale nie do przeglądania, co oznacza, że byłoby to trudniejsze dla a
złośliwemu użytkownikowi w celu znalezienia nazw plików, którymi można manipulować.
W grupie pamięci podręcznych kompilacji każda ma swoją własną wartość, więc możesz to wymusić
różne uprawnienia do zapisu na różnych dyskach.
Jeśli nie określisz uprawnień, Twoje uprawnienia umask w czasie tworzenia
mają zastosowanie przez cały okres istnienia pamięci podręcznej kompilacji.
kleń [opcja ...] /ścieżka/do/pamięci podręcznej ...
Czyści pamięć podręczną. MakePp nigdy nie usuwa plików z pamięci podręcznej kompilacji; to zależy od Ciebie
aby usunąć pliki za pomocą tego polecenia. W przypadku pamięci podręcznych wielu użytkowników może to zrobić administrator.
Usuwane są tylko pliki z liczbą łączy wynoszącą 1 (w przeciwnym razie plik nie zostanie przesłany).
i tak fizycznie usunięty - po prostu wyczyściłbyś plik, którym najwyraźniej ktoś jest
nadal zainteresowany, więc ktoś inny też może być). Kryteria, które podałeś, dotyczą
rzeczywiste pliki w pamięci podręcznej. Każdy plik informacyjny kompilacji zostanie usunięty, gdy jego plik główny zostanie usunięty.
Żadne puste katalogi nie zostaną pozostawione. Niezależnie od liczby linków i dostępnych opcji
daj, każdy plik, który nie pasuje do pliku informacyjnego kompilacji, zostanie usunięty, jeśli jest starszy
niż margines bezpieczeństwa wynoszący 10 minut.
Poniższe opcje przyjmują jako argument specyfikację czasu. Specyfikacje czasu zaczynają się od
„+” oznacza dawno temu, „-” oznacza niedawno lub nic pomiędzy
numer, który podałeś, i jeszcze jeden. Liczby, które mogą być ułamkowe, domyślnie oznaczają dni.
Ale może po nich następować jedna z liter „w” (tygodnie), „d” (dni, wartość domyślna),
„h” (godziny), „m” (minuty) lub „s” (sekundy). Pamiętaj, że dni to po prostu 24 prawdziwe godziny
ignorując jakąkolwiek zmianę czasu letniego na zimowy. Przykłady:
1 od 24 do 48 godzin temu
24 godziny od 24 do 25 godzin temu
0.5 dnia od 12 do 36 godzin temu
1 tydzień od 7 do 14 razy 24 godziny temu
-2 mniej niż 48 godzin temu
+30m więcej niż 30 minut temu
Wszystkie poniższe opcje są połączone znakiem „i”. Jeśli chcesz kilka zestawów
kombinacje z „lub”, musisz wielokrotnie wywoływać to polecenie z różnymi zestawami
opcje. Najpierw wykonaj te, w których spodziewasz się największej liczby usunięć, a potem zrobią to inni
bądź szybszy.
Opcje standardowe: „-A, --args-file, --arguments-file=nazwa pliku, -v, --verbose”
-a specyfikacja
--czas specyfikacja
--czas dostępu specyfikacja
Ostatni raz plik został odczytany. W przypadku połączonego pliku może się to zdarzyć w dowolnym momencie.
W przeciwnym razie jest to ostatnia kopia pliku. W źle zachowujących się systemach
może to być także czas utworzenia ostatniej kopii zapasowej na taśmie lub indeksu wyszukiwania. Mógłbyś
spróbuj wykluczyć pamięć podręczną z takich operacji.
Niektóre systemy plików nie obsługują pola atime, a nawet jeśli system plików
tak, czasami ludzie wyłączają czas dostępu do swoich systemów plików, ponieważ to dodaje
dużo dodatkowego wejścia/wyjścia na dysku, co może być szkodliwe w notebookach zasilanych bateryjnie lub w
optymalizacja szybkości dysku. (Ale jest to potencjalnie możliwe do naprawienia - zobacz
Komentarz UTIME_ON_IMPORT w Mpp/BuildCache.pm.)
-b
--mieszanka
--grupy mieszane
Zwykle każdy /ścieżka/do/pamięci podręcznej określisz, będzie oddzielnie traktować grupę build
skrytki, do których należy. Każda grupa jest traktowana tylko raz, nawet jeśli tak określisz
kilka ścieżek z tej samej grupy. Dzięki tej opcji tymczasowo mieszasz wszystko
grupy, które określisz, w jedną grupę.
Robienie tego dla czyszczenia może mieć niepożądane skutki, jeśli możesz utworzyć twarde łącze do dowiązań symbolicznych,
ponieważ może migrować członków z jednej grupy do drugiej. Kolejne nie mieszane
czyści, może następnie przedwcześnie oczyścić je z pierwotnej grupy.
-c specyfikacja
--cczas specyfikacja
--zmienić czas specyfikacja
Czas ostatniej zmiany i-węzła pliku. W sytuacji łączenia może tak być
czas, kiedy ostatni użytkownik odtworzył plik w inny sposób, usuwając łącze do niego
pamięć podręczna. Może to być również moment, w którym musiała to zrobić poniższa opcja „--set-user”.
zmienić użytkownika. W dobrze zachowanych systemach może to być również moment, w którym plik
ostatnia kopia zapasowa na taśmie lub utworzenie indeksu wyszukiwania zakryło swoje ślady poprzez zresetowanie
czas.
-m specyfikacja
--mczas specyfikacja
--czas-modyfikacji specyfikacja
Czas ostatniej modyfikacji pliku. Jak wyjaśniono w innym miejscu, jest to odradzane
aby makepp zaktualizował plik. Zatem ostatnią modyfikacją będzie zazwyczaj czas
stworzenia. (Ale w przyszłości makepp może opcjonalnie zaktualizować mtime kiedy
usuwanie plików. Dzieje się tak, aby łącza do systemów plików lub kopii pozbawionych czasu były możliwe
śledzone.)
-g grupa
--nowagrupa=grupa
--nowa-grupa=grupa
Ustaw efektywny i rzeczywisty identyfikator grupy na group (nazwa lub numer). Może być tylko root
w stanie tego zrobić. Jest to potrzebne, gdy używasz zgrupowanych pamięci podręcznych kompilacji i Ty
zapewnić dostęp do zapisu w pamięci podręcznej na podstawie identyfikatora grupy. Zwykle tak nie będzie
root, a tym samym replikacja utworzyłaby bez tego katalogi, których nie można zapisać
opcja.
Ta opcja nosi nazwę na podstawie równoważnego narzędzia „NewGRP”, którego niestety nie może łatwo
można używać w zadaniach „cron” lub podobnych konfiguracjach.
-i
--informacje o kompilacji
--sprawdź informacje o kompilacji
Sprawdź, czy informacje o kompilacji pasują do elementu członkowskiego. To badanie jest dość drogie, więc
możesz rozważyć rezygnację z tej opcji w ciągu dnia.
-l
--symlink-check
--sprawdzenie dowiązania symbolicznego
Ta opcja powoduje, że każde dowiązanie symboliczne, które nie ma zewnętrznego dysku twardego, odczytuje „czyste”.
linki, aby sprawdzić, czy wskazują żądanego członka. Jako że jest tego trochę
drogie, zaleca się robienie tego tylko w nocy.
-M specyfikacja
--w-czasie specyfikacja
-Nadchodzący czas modyfikacji specyfikacja
Czas ostatniej modyfikacji plików w katalogu przychodzącym. Ten katalog jest
używany do plików tymczasowych o nazwach specyficznych dla procesu, z których można swobodnie zapisywać
dostęp współbieżny, a następnie atomowo zmieniono nazwę na aktywną część pamięci podręcznej.
Pliki zwykle pozostają tutaj tylko tak długo, jak potrzeba do ich zapisania, ale mogą
zostają osierocone, jeśli proces je piszący zakończy się wcześniej nieprawidłowo
może je usunąć. Ta część pamięci podręcznej jest czyszczona w pierwszej kolejności, ponieważ liczy się link
w aktywnej części pamięci podręcznej mogą zostać niewłaściwie uszkodzone przez osierocone pliki.
Określenie czasu dla „--incoming-modification-time” musi zaczynać się od „+” i mieć wartości domyślne
na „+2h” (przyjmuje się, że pliki starsze niż 2 godziny zostały osierocone).
-w
--dni robocze
Ma to wpływ na sposób liczenia opcji czasowych. Weekendy są ignorowane, jakby tak było
nie było ich tam. Wyjątkiem jest sytuacja, gdy dajesz tę opcję w weekend. Niż to
weekend liczy się normalnie. Możesz więc go używać w zadaniach cron, które będą uruchamiane od wtorku
przez sobotę. Czas letni jest ignorowany. Letnie weekendy mogą więc zaczynać się od soboty
1:00 do poniedziałku 1:00 lub w zimowe weekendy na półkuli południowej od piątku 23:00 do
Niedziela 23:00 lub niezależnie od tego, jak bardzo Twoja strefa czasowa zmienia czas. Święta też są
nie brane pod uwagę.
-p kod perl
--perl=kod perl
--predykat=kod perl
DO ZROBIENIA: dostosuj ten opis do zmian grupowych!
To jest szwajcarski nóż oficerski. The kod perl jest wywoływana jednokrotnie w kontekście skalarnym
dla każdego wpisu w pamięci podręcznej (tj. z wyłączeniem katalogów i plików metainfo). To jest
wywoływany w funkcji „File::Find” „poszukiwany”, więc zobacz tam, jakie zmienne możesz znaleźć
używać. Wykonano operację „lstat”, więc można użyć uchwytu pliku „_”.
If kod perl zwraca „undef” – jest tak, jakby go nie było, czyli jest inaczej
decydują opcje. Jeśli zwróci wartość true, plik zostanie usunięty. Jeśli zwróci wartość false,
plik zostaje zachowany.
-s specyfikacja
--rozmiar specyfikacja
Specyfikacja rozmiaru pliku działa tak samo jak specyfikacja czasu, z „+” dla
większy niż lub „-” dla mniejszych niż, z tą różnicą, że jednostkami musi być „c” (bajty,
domyślnie), „k” (kilobajty), „M” (megabajty) lub „G” (gigabajty).
-u użytkownik
--użytkownik=użytkownik
--set-użytkownik=użytkownik
Ta opcja jest zupełnie inna. Nie mówi, kiedy usunąć plik. Zamiast tego
dotyczy plików, które nie zostaną usunięte. Pamiętaj, że w wielu systemach tylko root
może ustawić użytkownika pliku. Zobacz w sekcji „Ostrzeżenia dotyczące pracy z build
caches”, dlaczego może być konieczna zmiana właściciela na neutralnego użytkownika, jeśli używasz
przydziały dysku.
Ta strategia działa tylko wtedy, gdy możesz zaufać użytkownikom, że nie zakłócają kompilacji
pamięć podręczna do przechowywania dowolnych (tj. nierozwojowych) plików przekraczających limit dysku.
Własność powiązanego pliku metadanych zostaje zachowana, więc zawsze możesz zobaczyć
który buforował plik. Jeśli potrzebujesz tej opcji, może być konieczne podanie ich kilku
razy w ciągu dnia.
Istnieją różne możliwe strategie, w zależności od tego, ile masz miejsca i dalej
czy pamięć podręczna kompilacji zawiera połączone pliki, czy też użytkownicy mają tylko kopie.
Można łączyć kilka strategii, wywołując je jedna po drugiej lub w inny sposób
czasy. Polecenie „pokaż” ma pomóc Ci w znalezieniu odpowiedniej strategii.
Bieg nocny (od wtorku do soboty) może określić „--atime +2” (lub „--mtime”
jeśli nie masz czasu), usunięcie wszystkich plików, których nikt nie czytał od dwóch dni.
Jeśli użyjesz linków, możesz także zapobiec szybkiemu, bezużytecznemu wzrostowi, który ma miejsce, gdy
kolejne zmiany nagłówka, które nigdy nie podlegają kontroli wersji, prowadzą do wielu obiektów
powstają błyskawicznie. Coś w rodzaju biegu godzinowego z „--mtime=-2h --ctime=+1h”
w ciągu dnia złapie tych gości, których twórca usunął w ciągu niecałej godziny,
i od tego czasu nikt inny nie chciał.
pokazać [opcja ...] /ścieżka/do/pamięci podręcznej ...
Jest to rodzaj rekurencyjnego polecenia „ls -l” lub „stat”, które pokazuje pierwotnego właściciela
również w przypadku zmiany właściciela pliku buforowanego i pliku metadanych
zachowuje pierwotnego właściciela (zgodnie z „clean --set-user”). Pokazuje podane pliki, lub
wszystko w podanych katalogach.
Pola są krótkie, standardowe i długie, szczegółowe:
TRYB, tryb
Tryb ósemkowy pliku w pamięci podręcznej, który zwykle jest taki, jak został umieszczony, minus
napisz bity.
EL, linki zewnętrzne
Łączna liczba zewnętrznych twardych łączy prowadzących do wszystkich członków grupy.
Tylko wtedy, gdy wynosi 0, plik kwalifikuje się do czyszczenia.
C, kopie (tylko w przypadku zgrupowanych pamięci podręcznych kompilacji)
Liczba kopii identycznego pliku we wszystkich pamięciach podręcznych kompilacji. Idealnie to
dotyczy systemów, które pozwalają na twarde dowiązania do dowiązań symbolicznych, ale może to być możliwe
tymczasowo nie będzie możliwe, jeżeli istnieją linki zewnętrzne do więcej niż jednej kopii
(w takim przypadku stracilibyśmy liczbę linków, gdybyśmy je usunęli.
S, dowiązania symboliczne (tylko w przypadku zgrupowanych pamięci podręcznych kompilacji)
Liczba dowiązań symbolicznych między pamięciami podręcznymi kompilacji. Idealnie jest to liczba
buduj pamięci podręczne minus jeden w systemach, które pozwalają na twarde dowiązania do dowiązań symbolicznych.
Jednak jak wyjaśniono w poprzednim polu, kopii może być więcej niż to konieczne,
i tym samym mniej linków.
UID Właściciel buforowanego pliku. Można to zmienić za pomocą opcji „clean --user”.
BI-UID
Właściciel pliku informacji o kompilacji. Nie zmienia tego czyste, pozwalające widzieć
kto pierwszy zbudował plik.
ROZMIAR
Rozmiar (jednej kopii) w bajtach.
czas, czas, czas
W długiej, szczegółowej formie otrzymasz czas dostępu (odczytu) do pliku, modyfikację
czas i czas zmiany i-węzła (np. gdy jakiś użytkownik usunął swój zewnętrzny link do
plik buforowany). W krótkiej formie standardowej otrzymujesz tylko jeden z trzech razy
w trzech oddzielnych kolumnach:
AD, MD, CD
Dzień tygodnia, w którym nastąpił dostęp, modyfikacja lub zmiana i-węzła.
ADATA, MDATA, CDATE
Data dostępu, modyfikacji lub zmiany i-węzła.
ATIME, MTIME, CTIME
Godzina dnia dostępu, modyfikacji lub zmiany i-węzła.
PAŃSTWO
Pełna ścieżka pliku w pamięci podręcznej, łącznie z kluczem, z katalogu głównego pamięci podręcznej.
W przypadku opcji „-v, --verbose” informacje wyświetlane dla każdego polecenia umożliwiają uzyskanie pliku
wrażenie, jakie opcje nadać poleceniu „wyczyść”. Czasy są pokazane w
czytelną formę, a także liczbę dni, godzin lub minut wieku tego pliku
właśnie przekroczył. Jeśli podwoisz opcję, dodatkowo otrzymasz informacje o każdej z nich
członek grupy.
Opcje standardowe: "-A, --args-file, --arguments-file=nazwa pliku, -f, --force, -o,
--output=nazwa pliku, -O, --outfail, -v, --verbose"
-a
--czas
--czas dostępu
Pokaż czas dostępu do pliku zamiast czasu modyfikacji pliku w trybie niepełnym.
-b
--mieszanka
--grupy mieszane
Zwykle każdy /ścieżka/do/pamięci podręcznej określisz, będzie oddzielnie traktować grupę build
skrytki, do których należy. Każda grupa jest traktowana tylko raz, nawet jeśli tak określisz
kilka ścieżek z tej samej grupy. Dzięki tej opcji tymczasowo mieszasz wszystko
grupy, które określisz, w jedną grupę.
-c
--cczas
--zmienić czas
Pokaż czas zmiany informacji o i-węźle, zamiast czasu modyfikacji pliku w formie niepełnej
tryb.
-d
--usuwalne
Pokaż tylko pliki, które można usunąć, tj. te, których liczba linków zewnętrznych wynosi 0.
-p wzorzec
--wzór=wzorzec
Wzór czy wzorzec nazwy pliku w stylu bash (tj. ?, *, [], {,,}) jest dopasowany
nazwy elementów po podkreśleniu oddzielającym je od klucza.
-s podstęp
--sortuj=podstęp
W trybie niepełnym zmień kolejność sortowania. Na liście nie jest rozróżniana wielkość liter
kolejność tytułów kolumn oddzielonych przecinkami lub spacjami. Istnieją dwa szczególne przypadki:
„członek” uwzględnia tylko nazwy znajdujące się po kluczu, tj. nazwy plików takimi, jakie są
poza pamięcią podręczną. Istnieje specjalna nazwa „wiek”, która grupuje w zależności od tego
wyświetlana jest data i godzina. Ta opcja jest domyślnie ustawiona na „członek, wiek”.
Jeśli masz ogromną pamięć podręczną, której sortowanie zajmuje nieznośnie długo lub wymaga więcej
pamięci niż dozwolone są twoje procesy, możesz pominąć sortowanie, podając pustą
lista.
statystyki [opcja ...] /ścieżka/do/pamięci podręcznej ...
Spowoduje to wyświetlenie kilku tabel statystyk dotyczących zawartości pamięci podręcznej kompilacji. Każdy stół
jest podzielony na trzy grupy kolumn. Pierwsza kolumna jest różna dla każdej tabeli i jest
nagłówek wiersza. Pozostałe dwie grupy dotyczą sumy ROZMIAR plików i ich ilość AKTA
dla tego nagłówka. Katalogi i pliki informacyjne o kompilacji nie są liczone, więc jest to plik a
trochę mniej pod względem rozmiaru niż rzeczywiste wykorzystanie dysku i około połowa pod względem liczby plików.
Każda z dwóch ostatnich grup składa się z trzech par kolumn, jednej kolumny z wartością,
i jeden dla procentu całości, którą reprezentuje ta wartość. Pokazuje się pierwsza para
albo rozmiar plików, albo liczba plików. Pozostałe dwie pary pokazują
KUMULraz od najmniejszego do największego i raz na odwrót.
Pierwsze trzy tabele z pierwszą kolumną AD, CD or MD pokaż czasy dostępu, i-węzeł
czasy zmian lub czasy modyfikacji pogrupowane według dni. Dni to właściwie bloki 24-godzinne
odliczając wstecz od czasu rozpoczęcia polecenia stats. Wiersz „0” pierwszego
tabela pokaże zatem sumę rozmiarów i liczbę plików, do których uzyskano dostęp w czasie krótszym niż jeden dzień
temu. Jeśli wówczas nie uzyskano dostępu do żadnych plików, nie będzie wiersza „0”. Rząd „1” w trzecim
tabela pokaże zmodyfikowane pliki (tj. zapisane w pamięci podręcznej kompilacji) pomiędzy 24 a 48
godzinę temu.
Kolejny stół, EL, pokazuje linki zewnętrzne, tj. z ilu drzew kompilacji udostępniany jest plik
pamięć podręczna kompilacji. Jest to miara użyteczności pamięci podręcznej kompilacji. Niestety, tylko
działa, gdy programiści mają pamięć podręczną na własnym dysku, w przeciwnym razie muszą skopiować
który nie pozostawia żadnego światowego śladu. Im więcej treści ma większą liczbę linków zewnętrznych, tym
większa korzyść z pamięci podręcznej kompilacji.
Znowu następny stół EL, pokazuje te same informacje co poprzednie, ale ważone
poprzez liczbę linków zewnętrznych. Każdy bajt lub plik z liczbą linków zewnętrznych równą jeden
liczy się jako jeden. Ale jeśli liczba wynosi dziesięć, wartości są liczone dziesięć razy. Dlatego
nagłówki zmieniają się na *ROZMIAR i *AKTA. Jest to wartość hipotetyczna, pokazująca jak
duże wykorzystanie dysku lub ile plików byłoby, gdyby wszystkie były używane te same drzewa kompilacji
brak pamięci podręcznej kompilacji.
Jeszcze jeden stół, C: S kopie do dowiązań symbolicznych, dotyczy tylko zgrupowanych pamięci podręcznych. Idealnie wszystko
członkowie istnieją w jednej kopii i o jedno mniej dowiązań symbolicznych niż jest pamięci podręcznych w grupie.
Dowiązania symboliczne pozostają „0” do czasu replikacji czyszczenia. Może istnieć więcej niż jedna kopia,
jeśli kilka osób utworzyło identyczny plik przed jego replikacją, lub jeśli
replikacja przeniosła plik na preferowany dysk, ale oryginalny plik nadal tam był
używać. Zbędne kopie stają się dowiązaniami symbolicznymi, gdy czyszczenie wykryje, że ich już nie ma
Zewnętrzne linki.
Opcje standardowe: „-A, --args-file, --arguments-file=nazwa pliku, -v, --verbose”
-h
--godziny
Wyświetl pierwsze trzy tabele ze znacznie większą szczegółowością. Nagłówki kolumn
zmień na AH, CH or MH odpowiednio.
-p wzorzec
--wzór=wzorzec
Wzór czy wzorzec nazwy pliku w stylu bash (tj. ?, *, [], {,,}) jest dopasowany
nazwy elementów po podkreśleniu oddzielającym je od klucza. Wszystkie statystyki
ograniczają się do pasujących plików.
Ostrzeżenia pracujący w budować pamięci podręczne
Tworzenie pamięci podręcznych nie będzie działać dobrze w następujących okolicznościach:
· Jeśli polecenie uruchamiane przez makepp w celu zbudowania pliku jest właściwie tylko aktualizacje plik i
nie buduje go na świeżo, to powinieneś NIE użyj pamięci podręcznej kompilacji. (Przykładem jest
polecenie aktualizacji modułu w bibliotece statycznej (plik archiwum lub plik z rozszerzeniem
przedłużenie .a). Jak wyjaśniono w makepp_cookbook, na nowoczesnych maszynach jest to prawie
aktualizowanie pliku archiwum jest zawsze złym pomysłem — lepiej jest odbudować go od zera
za każdym razem z różnych powodów. This is yet another reason not to update an
archiwum.) Powodem jest to, że jeśli pamięć podręczna kompilacji znajduje się w
w tym samym systemie plików, makepp tworzy twarde łącze, zamiast kopiować plik. Jeśli wtedy
następnie zmodyfikuj plik, zrobi to plik, który makepp ma w pamięci podręcznej kompilacji
faktycznie zostać zmodyfikowany i możesz potencjalnie zepsuć kompilację kogoś innego.
W praktyce makepp zwykle wykrywa, że plik został zmodyfikowany od czasu jego powstania
umieszczone w pamięci podręcznej kompilacji i nie będzie go używać, ale czasami może to nie
wykryć modyfikację.
· Dla .o pliki, może to być nieco błędne, ponieważ mogą (w zależności od kompilatora
i poziom debugowania) zawierają ścieżkę do źródła, z którego zostały zbudowane. To może sprawić
debugowanie trudne. Debuger może spowodować edycję oryginalnej kopii pliku twórcy
źródła lub może nawet nie znaleźć pliku, jeśli twórca nie ma już kopii. Makepp
może kiedyś zaoferuje opcję załatania ścieżki, co oczywiście będzie oznaczać kopię,
zamiast wydajnego łącza.
· Żaden inny plik, w którym zakodowana jest ścieżka, nie powinien być umieszczany w pamięci podręcznej kompilacji
(jeśli udostępniasz pamięć podręczną kompilacji w kilku hierarchiach katalogów lub kilku
deweloperzy). W tym przypadku wynikiem kompilacji w innym katalogu nie jest plik
tak samo, jakby znajdował się w tym samym katalogu, więc cała koncepcja pamięci podręcznej kompilacji jest taka
nie dotyczy. Nie ma problemu, jeśli określisz ścieżkę katalogu w wierszu poleceń, np
to:
&echo prog_path=$(PWD) -o $(wyjście)
ponieważ wtedy wiersz poleceń będzie inny i makepp nie będzie niepoprawnie pobierał pliku
plik z pamięci podręcznej kompilacji. Ale jeśli wiersz poleceń nie jest inny, to tam
może być problemem. Na przykład,
echo prog_path=`pwd` > $(wyjście)
nie będzie działać prawidłowo.
· W przypadku korzystania z linków i wielu aktywnych twórców tego samego projektu na tym samym dysku,
kompilacja pamięci podręcznych może zaoszczędzić dużo miejsca na dysku. Ale jednocześnie dla użytkowników indywidualnych
może być również odwrotnie:
Wyobraź sobie, że Chang jako pierwszy wykonuje pełną kompilację. Przychodzi Ching i otrzymuje link do
wszystkie te pliki. Chang wprowadza kilka fundamentalnych zmian, dzięki którym większość rzeczy wraca do normy
odbudowany. On je sprawdza, Chong je sprawdza i otrzymuje linki do pamięci podręcznej kompilacji.
Chang ponownie wprowadza zmiany, co prowadzi do trzeciego zestawu plików.
W tym scenariuszu, niezależnie od zastosowanej strategii czyszczenia, żadne pliki nie zostaną usunięte,
ponieważ wszystkie są nadal w użyciu. Problem w tym, że wszystkie należą do Changa,
co może sprawić, że osiągnie on limit dysku i nic nie może z tym zrobić
większość systemów. Zobacz polecenie „clean --set-user” w sekcji „Jak zarządzać pamięcią podręczną kompilacji”
w jaki sposób administrator systemu może zmienić pliki na właściciela pamięci podręcznej bez przydziałów.
· Jeśli używasz sygnatur czasowych/rozmiarów do sprawdzenia celu i jego kompilacji
info (domyślnie), wówczas możliwe jest uzyskanie aliasu podpisu, w którym nie-
odpowiednie pliki nie zostaną wykryte. Na przykład wartość informacji o kompilacji MD5_SUM
może nie odpowiadać sumie kontrolnej MD5 celu. Zwykle nie stanowi to problemu, ponieważ
ze względu na fakt, że klucze pamięci podręcznej kompilacji są zgodne z celem w pamięci podręcznej kompilacji
można zastąpić obiektem docelowym, który odpowiadałby plikowi informacyjnemu kompilacji.
Jeśli jednak masz akcje reguł zależne od informacji o kompilacji, może to Cię dopaść
w kłopoty (więc nie rób tego). Jeśli Cię to niepokoi, użyj opcji --md5-check-bc
opcja.
Równoległy dostęp
Kompilowanie pamięci podręcznych musi obsługiwać współbieżny dostęp, co oznacza, że implementacja musi
bądź tolerancyjny wobec ras. W szczególności plik może się zestarzeć (usunąć) w międzyczasie
makepp decyduje się na zaimportowanie celu i godziny zakończenia importu.
Furthermore, some people use build caches over NFS, which is not necessarily coherent. W
innymi słowy, kolejność tworzenia i usuwania plików przez autora na jednym hoście nie będzie taka
koniecznie odpowiada kolejności widzianej przez czytelnika na innym hoście i dlatego jest wyścigiem nie może
rozwiązać, zwracając szczególną uwagę na kolejność operacji na plikach. (Ale tam jest
zwykle limit czasu pamięci podręcznej NFS wynoszący około 1 minuty, co gwarantuje, że zapisy nie będą wykonywane
dłuższy niż ten czas, aby dotrzeć do wszystkich czytelników. Ponadto zazwyczaj w
praktyka co najmniej 99% zapisów jest widocznych wszędzie w ciągu 1 sekundy.) Z tego powodu
musimy tolerować przypadek, w którym buforowany cel i plik informacyjny o jego kompilacji wydają się nie istnieć
korespondować. Co więcej, istnieje specyficzny wyścig, który może wystąpić, gdy plik jest
jednocześnie postarzany i zastąpiony, w którym pliki nie odpowiadają nawet po NFS
opróżnia pamięć podręczną. Wydaje się, że jest to nieuniknione.
Użyj makepp_build_cache_control online, korzystając z usług onworks.net