www.ntnu.no *
INFOWEB >  utvikling og programmering >  kompilerte språk  > Bruk av make
Tasks
You may add comments
Or e-mail this article
Read articles written by arnehall
User rating
How much did this article help you?
Much Some Little
Print preview
You do not need a 'printer-friendly page' to print this page. Here's why
Contents

Bruk av make

Bruk av make

På unix finnes et program som heter make. Dette programmet leser og tolker en såkalt make-fil, og utfører kommandoer som er gitt i denne.

Make benyttes typisk for å kompilere filer. Eksempel for java blir at man setter opp at målet er MyClass.class og at denne krever at MyClass.java kompileres.

En make-fil

En make-fil ser i sin enkleste form ut som under:

konsoll #1
	  # Dette er et eksempel på en make-fil, og som du ser
	  # kan hash-tegnet benyttes for å skrive kommentarer

	  mål1: avhengighet 1
	      handling1

	  mål2: avhengighet 2
	      handling2
	

En make-fil er delt inn i tre deler: mål, uavhengighet og handling. En handling skal ha et innrykk på en TAB, vanlig mellomrom kan ikke brukes.

Målet sendes som argument til make. Når make får dette, sjekker den om avhengigheten til målet er et annet mål. I så fall kjøres det nye målet før den fortsetter med det opprinnelige.

Dersom alle avhengighetene er navn på filer, utføres handlingen dersom avhengighetene er nyere enn målet eller målet ikke finnes.

For et lite program dilldall bestående av de to filene dill.c og dall.c, kan make-filen Makefile se ut som følger:

konsoll #2
	  # make-fil for programmet dilldall
	  # 

	  dilldall: dill.o dall.o
	      gcc -o dilldall dill.o dall.o

	  dill.o: dill.c
	      gcc -o dill.o -c dill.c

	  dall.o: dall.c
	      gcc -o dall.o -c dall.c
	

Når make dilldall kjøres vil make først sjekke målet dilldall. Den ser at dilldall avhenger av at dill.o og dall.o er tilstede. Videre ser den at dill.o og dall.o er egne mål i seg selv, og kjører derfor først disse målene, som er satt opp til å kompilere h.h.v. dill.c og dall.c til h.h.v. dill.o og dall.o. Når det er gjort, kjører den kommandoen for å sette dill.o og dall.o sammen til dilldall.

Noen konvensjoner

I make-filer er det ofte vanlig å ha mål som all og clean. All har som oppgave å gjøre alt i make-filen (utenom clean), mens clean typisk har som oppgave å fjerne alle resultater av å kjøre all. Eksempelvis kan make all kompilere all kode i et kodetre, mens make clean fjerner alle de kompilerte filene slik at bare kildekoden er igjen.

Variabler i make-filen

En make-fil kan inneholde variabler. En variable settes med:

konsoll #3
	  VARIABEL = tilordnet_verdi
	

Et eksempel på en make-fil som bruker variabler:

konsoll #4
	  CC = gcc

	  CFLAGS = -O -Wall

	  dill.o : dill.c
	      $(CC) $(CFLAGS) -o dill.o -c dill.c
	

Innebygget intelligens

make har en viss intelligens når det kommer til c og c++-filer. Når det spesifiseres at målet er dill.o, skjønner make at det er dill.c som skal kompileres, uten at vi trenger å fortelle det i make-filen. Eksempel:

konsoll #5
	  # Setter kompilator til å være gcc:
	  CC = gcc

	  # Parametre til kompilatoren:
	  CFLAGS = -O -Wall

	  dilldall: dill.o dall.o
	      $(CC) -o dilldall dill.o dall.o
	

Kjøres nå kommandoen make dilldall, ser make at den trenger dill.o og dall.o for å lage dilldall og kompilerer opp disse fra dill.c og dall.c. Helt automagisk!


Languages: no Comments: 0 Aid: 79 User rating:
 
 
Last updated: 2003-09-15 Author: arnehall Read: 4574 times