Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

mehrfachparsendes make

0 views
Skip to first unread message

Thomas Steinbach

unread,
Jun 10, 2009, 4:41:14 PM6/10/09
to
Hallo,

ist make eigentlich mehrfach parsend? Also wuerde das hier funktionieren?

all: dep $(BIN)

dep: $(SRC)
$(CC) -MM $(SRC) > $(DEP) $(CINCS)
-include $(DEP)

oder ist es zwingend das make zweimal aufzurufen?
Oder kann make quasi bis " $(CC) -MM $(SRC) > $(DEP) $(CINCS)"
lesen und ausfuehren und dann die erzeugte Datei auch gleich einlesen
und eben beruecksichtigen?

siehe: http://www.ijon.de/comp/tutorials/makefile.html#dep

btw: weiss jemand ob das "include" auch andere make utils koennen?

Thomas

Jan Seiffert

unread,
Jun 10, 2009, 8:24:00 PM6/10/09
to
Thomas Steinbach wrote:
> Hallo,
>
> ist make eigentlich mehrfach parsend?

Ohhh, du betrittst eine Welt des Schmerzes...

> Also wuerde das hier funktionieren?
>
> all: dep $(BIN)
>

Das ist etwas unguenstig...

> dep: $(SRC)
> $(CC) -MM $(SRC) > $(DEP) $(CINCS)
> -include $(DEP)
>

Unter GNU Make: nein.

Ein Make liest schon alle Dateien und includes "bis zum schluss", damit es den
DAG aufbauen kann und damit auch eine "oben" benutzte Variable mit dem letzten
Wert "von unten" ersetzt werden kann (darum kennt GNU make ja ':=' fuer "jetzt
hier sofort zuweisen und benutzen").

Aber ob nach einer Aenderung einer der Makefiles _waehrend_ des make alles neu
geparst wird, das ist glaube ich nicht bestimmt.

> oder ist es zwingend das make zweimal aufzurufen?
> Oder kann make quasi bis " $(CC) -MM $(SRC) > $(DEP) $(CINCS)"
> lesen und ausfuehren und dann die erzeugte Datei auch gleich einlesen
> und eben beruecksichtigen?
>

Du kannst die deps erzeugen und dann make sich selbst noch mal aufrufen lassen.
Wenn du in das erste make zurueck kommst, sollte nichts mehr zu tun sein.

.SUFFIXES: .deb
.deb.c:
$(CC) -MM $< > $@

all: $(BIN)

$(BIN): $(OBJS)
$(CC) ...

$(OBJS): Makefile dep config.h

dep: $(DEPS)
$(MAKE) $(MAKECMDGOALS)

.include $(DEPS)

Nur MAKECMDGOALS ist dann auch wieder nur begrenzt portabel, unter anderen Makes
erweitert das dann zu "" was dann auf make ohne target hinauslaeuft.


> siehe: http://www.ijon.de/comp/tutorials/makefile.html#dep
>

So toll das alles klingt, ich hab sowas aehnliches selbst ausprobiert...
... seitdem schreibe ich meine deps von Hand.

> btw: weiss jemand ob das "include" auch andere make utils koennen?
>

Die meisten, es ist aber nicht in Posix

<http://www.opengroup.org/onlinepubs/009695399/utilities/make.html#tag_04_84_18>

Und natuerlich der Rest der Seite

> Thomas
>
Gruss
Jan

--
Woo Hoo Woo Hoo Hoo

Enrik Berkhan

unread,
Jun 11, 2009, 6:36:06 AM6/11/09
to
Thomas Steinbach <stei...@gmx-topmail.de> wrote:
> ist make eigentlich mehrfach parsend? Also wuerde das hier funktionieren?

> all: dep $(BIN)

> dep: $(SRC)
> $(CC) -MM $(SRC) > $(DEP) $(CINCS)
> -include $(DEP)

GNU make unterstützt diesen Ansatz, s. "Automatic Prerequisites" und
"Remaking Makefiles" in der GNU make Dokumentation.

Gruß,
Enrik

0 new messages