Abhängigkeitsproblem mit Gnu make
-
06-09-2019 - |
Frage
Ich bin vor ein ziemlich seltsames Problem mit machen. Meine Make-Datei enthält:
all: item1 item2
item1: dep1 dep2
dep1:
@echo
cd $(HOME)/apps; /bin/rm -f $(D_ALL_OBJECTS)
cd $(SRCHOME)/fusionapps; make -k -f $(SOMEMAKEFILE) $(D_ALL_OBJECTS)
@echo
dep2:
@echo
cd $(HOME)/apps; /bin/rm -f $(D2_ALL_OBJECTS)
cd $(SRCHOME)/fusionapps; make -k -f $(SOMEMAKEFILE) $(D2_ALL_OBJECTS)
@echo
item2: ...
.....
Jetzt „make -f Makefile item1
“ funktioniert, aber wenn ich versuche, „make -f Makefile all
“ es funktioniert nicht. Haben Sie Leute in meiner Make-Datei Probleme sehen?
Danke
Addendum :
Nun, es sieht aus wie make erlaubt keine Ziele, die gleichen Namen in der aktuellen Ebene als ein Verzeichnis hat. Beobachtung:
- "alle" ist ein Verzeichnis @ $ (HOME) / apps
-
all1: item1 item2
funktioniert -
all: item1 item2
nicht funktioniert
So dass jeder Zielname scheint denselben Namen wie ein Verzeichnis mit fehlschlagen (wie in, etwas Sinnvolles zu tun, scheitert).
Ich bin mir ziemlich sicher, dass ich etwas absurd falsch hier tue.
Lösung
Wenn Sie schreiben:
all: item1 item2
und dann make all
anfordern, das sagt make
:
- Finden Sie eine Dateisystem-Objekt namens
all
und sicher etwas machen es hängt davon ab (item1
,item2
) ist auf dem neuesten Stand. - Wenn
all
existiert nicht oder nicht mehr aktuell ist w.r.t entweder die Dateisystemobjekteitem1
oderitem2
genannt, dann die angegebenen Aktionen ausführen (keine in diesem Beispiel) und dann prüfen, bisherall
auf. - Wenn
all
ein Verzeichnis ist, es existiert. Wenn es vor kurzem geändert wurde, wird es auf dem neuesten Stand sein.
Der Vorschlag .PHONY: all item1 item2
zu verwenden ist gut für GNU Make; es nicht mit anderen Varianten der make
arbeiten.
Sie Zielnamen nicht verwenden, die Verzeichnisnamen sind - es sei denn, Sie sicher, dass Sie wissen, was Sie tun. Und verwenden .PHONY
.
Andere Tipps
Versuchen Sie falsche Deklarierung Ihre Nur- Ziel.
Nun sieht aus wie make erlaubt keine Ziele, die als ein Verzeichnis in der aktuellen Ebene denselben Namen haben. Beobachtung:
- "all" ist ein Verzeichnis @ $ (HOME) / apps -all1 / 2/3: item1 item2 arbeitet -all: item1 item2 nicht so funktioniert die jede Zielnamen, die denselben Namen wie das Verzeichnis
.Ich bin ziemlich sicher, dass ich etwas absurd falsch hier tue.