| Linux – Friheden til at programmere: Version 2.5 – 25/01-2004 | ||
|---|---|---|
| forrige | Kapitel 5. Programmørens værktøjskasse | næste |
Næste eksempel er to filer hvor den ene kalder funktioner i den anden. I eksemplet der er skrevet i C, er det igen det største af to tal der skal findes og skrives ud.
Følgende fil kan gemmes som ceks2.c.
#include <stdio.h>
#include <math.h>
float v1,v2,retval;
float max(float,float);
int main(void)
{
v1=sin(2.34);
v2=tan(4.4);
retval=max(v1,v2);
printf("Af %f og %f er %f stoerst\n",v1,v2,retval);
return 0;
}
|
Følgende fil kan gemmes som cfkt.c.
float max(float f1,float f2)
{
float f3;
if (f1>f2)
f3=f1;
else
f3=f2;
return f3;
}
|
hven% gcc -o ceks2 ceks2.c cfkt.c -lm |
En langt mere elegant metode er at lave en oversættelsesfil. Herefter skrives blot make, og C-oversætteren vil kun oversætte de filer der er nyere end de oversatte filer. Oversættelsesfiler kan også bruges til at styre oversættelse af andet end regulære programmer. For eksempel LaTeX-kode. En oversættelsesfil (med navnet Makefile) kunne være følgende.
# Makefile til GNU C-oversætteren - dette er en kommentar
# I dette eksempel oversættes to filer.
# ceks2.c og cfkt.c oversættes til den kørbare fil ceks2
# Kommandoen til at oversætte C-programmer er "gcc":
CC = gcc
# Navn paa koerbar fil
OUTPUT = ceks2
# Kildefilnavne, bemærk der er ingen mellemrum efter \ tegnet.
sources = ceks2.c \
cfkt.c
# Automatisk navngivning af objektfiler hvor .c laves om til .o
OBJS = $(sources:.c=.o)
# Oring niveau 2
CFLAGS = -O2
#Linkerflag: Inkluderer matematik-bibliotek
LDFLAGS = -lm
# Foelgende linje tjekker om en .o fil er nyere end den koerbare fil. Hvis
# dette er tilfaeldet, linkes disse. Dvs. kun nye elementer oversættes.
$(OUTPUT): $(OBJS)
$(CC) $(CFLAGS) -o $(OUTPUT) $(OBJS) $(LDFLAGS)
|
Bemærk at indrykninger i oversættelsesfiler skal være tabulatortegn! Det fungerer ikke med mellemrum.
Oversættelsesfilen består af en masse definitioner af variable og en eller flere opskrifter. Opskriften fortæller at $(OUTPUT) (ceks2) afhænger af objektkodefilerne $(OBJS) (ceks2.o og cfkt.o), og at ceks2-programmet kan laves med opskriften gcc -O2 -o ceks2 ceks2.o cfkt.o -lm. Make-programmet gætter selv hvordan .c-filer skal oversættes for at danne objektfiler .o.
Når oversættelsesfilen er skrevet, kan programmet bare oversættes ved at skrive
hven% make |