User Tools

Site Tools


linuxbog:program:vaerktoej-make
Linux – Friheden til at programmere: Version 2.5.20050330 – 2020-12-31
forrige Kapitel 5. Programmørens værktøjskasse næste

5.10. Brug af oversættelsesfiler ("makefiles")

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 somceks2.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 somcfkt.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 navnetMakefile) 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<code>hven%make</code>

i det katalog hvor oversættelsesfilen findes. En oversættelsesfil kan være

meget lang og indeholde mange opskrifter der indbyrdes kan afhænge af
hinanden. Make-programmet undersøger datoen på alle filer, og hvis datoen på
kildeteksten er nyere end datoen på den tilsvarende objektfil, så er
objektfilen forældet, og make oversætter automatisk kildeteksten igen og
samler programmet med den nye objektfil.

forrige hjem næste
Electric Fence op Autoconf og automake
linuxbog/program/vaerktoej-make.txt · Last modified: by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki

Brug af AI : Al tekst kán være uddrag af AI genereret tekst og kan være fejlbehæftet.
AI kan lave fejl og det kan mennesker også, men al tekst er gennemgået af et menneske for fejl, og personlig bias kan være tilføjet.