Pytanie uzależnienie wszystkich reguł od samego Makefile


Kiedy zmieniam plik Makefile, jego reguły mogły ulec zmianie, więc powinny zostać ponownie ocenione, ale wydaje się, że nie wydaje się, że tak.

Czy jest jakiś sposób, aby w Makefile powiedzieć, że wszystkie jego cele, bez względu na które, zależą od samego pliku Makefile? (Niezależnie od nazwy.)

Używam GNU make.


16
2017-10-06 10:12


pochodzenie




Odpowiedzi:


Wygląda to na jeszcze jedną prostą, przydatną i logiczną rzecz, którą Make powinien móc zrobić, ale nią nie jest.

Oto sposób obejścia tego problemu. Jeśli clean reguła jest poprawnie skonfigurowana, Make może ją wykonać za każdym razem, gdy plik Makefile został zmieniony, używając pustego dummy plik jako znacznik.

-include dummy

dummy: Makefile
    @touch $@
    @$(MAKE) -s clean

Będzie to działać w przypadku większości celów, czyli celów, które są rzeczywistymi plikami i które są usuwane przez czyste, oraz wszelkich celów, które są od nich zależne. Cele niepożądane i niektóre PHONY cele przebiją się przez sieć.


12
2017-10-08 17:17



Dobra sztuczka, ale jeśli chcę, aby wszystkie moje zależności zostały przerobione (co zajmuje około 30 minut w moim obecnym projekcie), zadzwonię make clean siebie. - reinierpost
Powstaje związane z tym pytanie: jak automatycznie generować reguły make clean? Mój obecny plik Makefile nie ma żadnego. - reinierpost
@reinierpost: poczekaj chwilę. Czy nie chcesz, aby wszystkie zależności zostały przerobione, jeśli plik Makefile został zmieniony? Czy nie chcesz, aby wszyscy oni polegali na samym pliku makefile? Czy nie o to chodzi? - Beta
@reinierpost: Jeśli chodzi o generowanie clean rządzić, brzmi to tak, jakbyś rozwiązał niewłaściwy problem. Ile masz celów? - Beta
@reinierpost: Używanie Make do plików tekstowych jest niezwykłe, ale nie jest przekleństwem. Może istnieć dobry sposób obejścia problemu, ale dokładny pożądane rozwiązanie nie istnieje. I błędnie przeczytałeś, co napisałem o listach: może być ich wiele, ale nowy cel byłby tylko na jednym lub dwóch z nich. - Beta


Jedyną odpowiedzią na to jest dodanie pliku makefile wprost do zależności. Na przykład, %.o: %.c makefile $(CC) $(CFLAGS) -c $<


1
2017-07-24 22:50



Dobry pomysł na dodanie $(CPPFLAGS) do reguły, aby dopasować odpowiednie niejawna reguła - juanchopanza