Re: Makefile selber schreiben

From: Simon 'corecode' Schubert <corecode(at)fs.ei.tum.de>
Date: Fri, 21 Jan 2005 16:09:50 +0100

On Friday, 21. January 2005 14:58, Matthias Fechner wrote:

ich erklaer mal anhand der F man page

> ich hab da jetzt was gefunden, was klappt, wobei ich das noch hinten
> und vorne nicht verstehe:
> 1. FIGS!= echo xfigs/*.fig

also FIGS ist eine variable:
     != Expand the value and pass it to the shell for execution and
             assign the result to the variable. Any newlines in the result
             are replaced with spaces.

er fuehrt also das echo aus und uebernimmt den output in die variable.
shell-aequivalent: FIGS=`echo xfigs/*.fig`

> 2. .SUFFIXES: .fig .pdf

     .SUFFIXES Each source specifies a suffix to make. If no sources are
                 specified, any previous specified suffices are deleted.

erklaert make, dass es uebrigens auch dateien mit .fig oder auch .pdf endung
gibt.

> 3. .fig.pdf:

eine sogenannte suffix transformation rule: "wie komme ich von .fig
nach .pdf?"

> 4. @echo "fig2dev -L pdf ${.IMPSRC} ${.TARGET:C/xfigs/pictures/}"

die anweisungen dazu.

             .IMPSRC The name/path of the source from which the target is to
                       be transformed (the ``implied'' source); also known as
                       `<'.

wir haben ja keine explizite quelle angegeben, die sucht sich ja make selbst
raus ("foo.fig").

             .TARGET The name of the target; also known as `@'.

naja, das was eben produziert werden soll dabei ("foo.pdf")

     C/pattern/replacement/[1g]
                 Modify each word of the value, substituting every match of
                 the extended regular expression pattern (see re_format(7))

alles was nach einem : in einer variable kommt, ist ein modifier. in dem fall
eben ein ersetzungsmodifier. wie s/// bei sed. macht also aus xfigs ->
pictures

> 5. foo.dvi: main.tex ${FIGS:S/fig$/pdf/g}

eine explizite regel. "wovon haengt foo.dvi ab? main.tex und FIGS. allerdings
wird FIGS hier wieder modifiziert:

     S/old_string/new_string/[g]
                 Modify the first occurrence of old_string in each word of the
                 variable's value, replacing it with new_string.

modifier S ist also so aehnlich wie C, nur nicht mit regex

> 6. @echo "latex foo"

die regel, was ueberhaupt zu machen ist, damit foo.dvi rausfaellt.

> 2. wieso führt er die Zeile foo.dvi aus? (weil es keine andere wie
> all: gibt?)

weil es die erste explizite regel ist. drum steht meistens all: ganz oben im
makefile. sowas kann aber mit .NOTMAIN oder .MAIN beeinflussen.

> 3. kann ich das irgendwie auf den GNU make umbauen?

willst du nicht wirklich :) gnu make ist in der hinsicht ganz anders und
mindestens genauso kompliziert.

> Das Problem ist, daheim hab ich eine FreeBSD Maschine, aber in der
> Arbeit hab ich so eine Windowsmaschine und da hab ich dann leider nur
> cygwin und da wiederrum habe ich nur den GNU make....

hier gibts ein automakisiertes bsd make. basiert auf dem von netbsd, ist also
nicht 100% kompatibel zum freebsd make, aber das interessiert fuer normale
anwendungen nicht.

http://www.crufty.net/help/sjg/bmake.html

> Aber der GNU make scheint die Kommandos wie :C oder :S nicht zu kennen
> und ein man gmake hilft hier nicht wirklich weiter.

da brauchst du schon die html referenz oder so :)

gruesse
  simon

-- 
/"\
\ /
 \     ASCII Ribbon Campaign
/ \  Against HTML Mail and News

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 21 Jan 2005 - 16:10:52 CET

search this site