W przypadku zmiany pliku Makefile, bezpieczny zakład będzie uwzględniał wszystkie cele przestarzałe.Zależy od samego pliku make
Czy istnieje sprytny sposób na dodanie tej zależności? Czy są jakieś alternatywy?
W przypadku zmiany pliku Makefile, bezpieczny zakład będzie uwzględniał wszystkie cele przestarzałe.Zależy od samego pliku make
Czy istnieje sprytny sposób na dodanie tej zależności? Czy są jakieś alternatywy?
Bezpieczny zakład, ale straszny pomysł. Przykład: używasz automake i aktualizujesz Makefile.am
, aby dodać pojedynczy plik źródłowy. Poprawną odpowiedzią jest skompilowanie nowego pliku i połączenie go. W twoim schemacie wszystko zostanie odbudowane.
Ponadto, dodając zależność nie zrobi nic, jeśli nie dotykać plik, coś jak:
$(SRCS): Makefile
touch [email protected]
Będzie to potknąć się redaktorzy, które korzystają z mtime wykryć jednoczesną modyfikację (Emacs jest jedną przykład).
Jeśli robisz coś ważnego, po wykonaniu zmiany uruchom po prostu make clean all
.
Nie sądziłem, że źródła nie zostaną zaktualizowane. Ale co, jeśli wszystkie _targets_ zależą od Makefile? +1 za podniesienie dobrego punktu. –
@Matt Joiner: To by działało (trzeba by było również uwzględnić przechodnie zamknięcie wszystkich dołączonych plików .mk), ale nadal będziesz miał nadmiarową rekompilację, częściej niż nie. Lepiej się nie przejmować: domyślnie masz krótkie kompilacje i możliwość wykonania pełnej kompilacji, jeśli zajdzie taka potrzeba. Jeśli to załatwisz, nie będziesz miał możliwości wykonania krótkiej kompilacji, jeśli wykonasz tylko drobne poprawki. Wiem, że robisz dużo rzeczy w C++. Nie możesz poważnie zasugerować, że koszt pełnej przebudowy projektu C++ jest niewielki? –
Dlaczego musisz dotknąć pliku Makefile? Reguła jest uruchamiana tylko wtedy, gdy Makefile jest już nowszy niż pliki obiektów. –
Upewnij się, że pliki wynikowe zależą makefile:
$(OBJFILES) : Makefile
Gdzie Makefile
to nazwa pliku make.
Zakładam, że jestem zobowiązany do samodzielnego wypełniania SRCFILES? –
Tak. Moje pytanie może brzmieć nieco arogancko, ale chciałem zapytać, jakiego rodzaju właściwości chciałbyś wybrać z alternatywnego rozwiązania. Nie znam sposobu na uzależnienie się od "każdego celu". –
Zadałem to samo pytanie nie tak dawno temu: http://stackoverflow.com/questions/3871444/making-all-rules-depend-on-the-makefile-self – reinierpost
Dziwne, że nie pojawił się w wyszukiwanie, nawet nie jest powiązane. –
To może nie wystarczyć. Co się dzieje, gdy zmienne ulegną zmianie? (Na przykład, może być konieczne zrobienie _clean_ między 'make CDEFS = debug' i' make CDEFS = release'.) – bobbogo