Re: Makefile selber schreiben

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 25 Jan 2005 17:20:10 +0100 (CET)

Matthias Fechner <idefix(at)fechner.net> wrote:
> * Oliver Fromme <olli(at)lurza.secnetix.de> [24-01-05 15:01]:
> > In dem von mir beigesteuerten (rekursiven) Makefile ist das
> > der Fall.
>
> dein Beispiel hatte ich versucht, habs aber leider nicht zum laufen
> bekommen (um ehrlich zu sein, ich verstehe von dem Makefile gar nichts).
>
> Aber wenn du Zeit und Lust hast, kannst du mir da gerne ein bischen
> helfen. :-) (lerne immer gerne was neues dazu)

Es waren zwei kleine Tippfehler drin (ich hatte ja ge-
schrieben, daß es ungetestet war). Jetzt habe ich's tat-
sächlich mal getestet, und es funktioniert. Achte darauf,
daß die Tabs erhalten bleiben (in Makefiles _müssen_ Tabs
vor den Actions stehen und können nicht einfach durch Leer-
zeichen erhalten bleiben). Besonders wenn man Krempel per
Copy&paste kopiert, werden aus Tabs häufig Leerzeichen.

Wenn noch Fragen oder Probleme sind, einfach heraus damit.
Die Funktionsweise sollte aber mit einer beliebigen make-
Dokumentation nachvollziehbar sein (z.B. das Make-Buch von
O'Reilly); dieses Makefile benutzt keine speziellen Sachen,
die nur mit BSD-make funktionieren würden. Man sollte sich
natürlich auch ein bißchen mit /bin/sh auskennen; hierfür
genügt i.allg. die sh(1) manpage.

Gruß
   Olli

SRC_DIR=xfigs
SRC_SFX=.fig

TRG_DIR=pictures
TRG_SFX=.pdf

COMMAND=fig2dev -L pdf %s %s

MAKEMAKE= \
        cat Makefile; \
        SOURCES="`echo $(SRC_DIR)/*$(SRC_SFX)`"; \
        echo ""; \
        echo SOURCES=$$SOURCES; \
        echo ""

all:
        @( \
                $(MAKEMAKE); \
                TARGETS=""; \
                for SRC in $$SOURCES; do \
                        TRG=$(TRG_DIR)/`basename $$SRC $(SRC_SFX)`$(TRG_SFX); \
                        TARGETS="$$TARGETS $$TRG"; \
                        printf '%s: %s\n' "$$TRG" "$$SRC"; \
                        printf '\t$(COMMAND)\n\n' "$$SRC" "$$TRG"; \
                done; \
                echo "alltargets:$$TARGETS" \
        ) | make -f - alltargets

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"anyone new to programming should be kept as far from C++ as
possible;  actually showing the stuff should be considered a
criminal offence" -- Jacek Generowicz
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 25 Jan 2005 - 17:22:17 CET

search this site