016
13.08.2009, 19:03 Uhr
holm
|
Enrico "make" ist ein Unix Tool, das nach in einem makefile definierten Regeln aAbläufe automatisieren kann. Das ist also sowas wie eine Batch Geschichte nur in sofern besser, als das es anhand der Verfügbarekein und Änderungszeiten der Quell und Zwischendateien selbständig festellt, was noch zu tun und was schon fertig ist.
Guck mal:
Quellcode: | OBJS= p.init.o p.term.o p.comm.o p.brk.o p.test.o p.gesa.o \ p.ldsd.o p.boot.o p.dummy.o p.disk.o p.crc.o p.ram.o
all: MON16
clean: rm -f MON16 ${OBJS} MON16: ${OBJS} ld ${OBJS} -o MON16 nm MON16 >symbols strip -h MON16
|
Das ist der Inhalt des obigen Makefiles.
Es gibt verschiedene Targets: "all", "clean" und "MON16"
man kann also schreiben make all, make clean, make MON16 oder einfach make, dann macht der "all". "all" wiederum ist abhängig von der Existenz von "MON16", deshalb macht das Ding "MON16". "MON16" ist abhängig von ${OBJS} also von den Objektfiles die oben definiert sind, nun guckt das Ding nach p.init.o, merkt das das nicht da ist und grast interne Regeln ab wie das eventuell zu bewerkstelligen währe, ein p.init.c würde durch den C-Compiler gewickelt, gibts aber nicht, dafür ein p.init.s wobei ".s" make anhand seiner internen Regeln als Assembler Source bekannt ist, deshalb leiert er das Ding selbständig durch den Assembler. Die Regeln können überschrieben werden. make "clean" löscht die ganzen objekte und MON16 wieder weg...
Praktische Sache, oder häh?
Make ist einer der Gründe warum ich unter Unix mit der Tastatur viel viel schneller bin als irgend ein Mausschubser unter $innlo$... Gruß,
Holm -- float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v; {s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+ (r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&& (A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;} |