Make Flashcards

1
Q

Wie sieht das minimale Gerüst für ein Makefile aus?

A

prog: main.o foo.o bar.o
gcc -o prog main.o foo.o bar.o

main.o: main.c
gcc -c main.c

foo.o: foo.c
gcc -c foo.c

bar.o: bar.c
gcc -c bar.c

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was macht der -c Befehl in Make?

A

Es wird nur kompiliert und nicht gelinkt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was macht der -o Befehl in Make?

A

Linked die Compiled Sources zu einem Programm

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was ist ein Target?

A

Ein Makefile ist dazu da, dem Programm make mitzuteilen, was es tun soll (dies ist das “target”)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was ist eine Regel?

A

wie es es tun soll (dies ist die zum target gehörige “Regel”)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was wird zu Beginn eines Makefiles oft als Target definiert und warum?

A

all

Aufruf von make ohne Parameter baut alle abhängigen Targets von all

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Was wird zu Beginn eines Makefiles oft als Target definiert und warum?

A

all

Aufruf von make ohne Parameter baut alle abhängigen Targets von all

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Wie werden Pattern in Regeln verwendet?

A

Viele Abhängigkeiten -> unpraktikabel für jede Datei Regel einzubauen.

$< die erste Abhängigkeit
$@ Name des targets
$+ eine Liste aller Abhängigkeiten
$^ eine Liste aller Abhängigkeiten, wobei allerdings doppelt vorkommende Abhängigkeiten eliminiert wurden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Welche Variablen in Makefiles gibt es?

A

CC Der Compiler
CFLAGS Compiler-Optionen
LDFLAGS Linker-Optionen

Auf den Inhalt dieser Variablen greift man dann mit $(CC), $(CFLAGS) bzw. $(LDFLAGS) zurück.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was sind Phony targets?

A

Make erzeugt nur Dateien neu wenn Abhängigkeiten sich ändern > nicht immer erwünscht(z.B Target clean)

Falls sie immer neu erzeugt werden sollen: Phony

OBJ = datei1.o datei2.o datei3.o datei4.o datei5.o
BIN = prog

.PHONY: clean
clean:
rm -rf $(BIN) $(OBJ)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wie werden Abhängigkeiten in Make praktischer definiert?

A

ohne die Abhängigkeiten jeder Objekt-Datei händisch ins Makefile einbauen zu müssen, definiert man meist ein target namens “dep” für “dependencies”:

SRC = datei1.c datei2.c datei3.c datei4.c datei5.c
CC  = /usr/bin/gcc
DEPENDFILE = .depend

dep: $(SRC)
$(CC) -MM $(SRC) > $(DEPENDFILE)

-include $(DEPENDFILE)

Die Option -MM lässt den Präcompiler Abhängigkeiten auflösen die in Datei .depend umgeschrieben werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wie werden Abhängigkeiten in Make praktischer definiert?

A

ohne die Abhängigkeiten jeder Objekt-Datei händisch ins Makefile einbauen zu müssen, definiert man meist ein target namens “dep” für “dependencies”:

SRC = datei1.c datei2.c datei3.c datei4.c datei5.c
CC  = /usr/bin/gcc
DEPENDFILE = .depend

dep: $(SRC)
$(CC) -MM $(SRC) > $(DEPENDFILE)

-include $(DEPENDFILE)

Die Option -MM lässt den Präcompiler Abhängigkeiten auflösen die in Datei .depend umgeschrieben werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wie wird in Make recursiv gebautP

A

Makefile im Top-Level-Verzeichnis

DIRS = dir1 dir2 dir3

compile:
for i in $(DIRS); do make -c $$i; done

Makefile.rules im Top-Level-Verzeichnis

CC     = /usr/bin/gcc
CFLAGS = -Wall -g

%.o:%.c
$(CC) $(CFLAGS) -c $<

Wichtig hierbei: make -c führt make erst aus wenn cd ausgeführt wurde. Danach wird das Makefile im Untervz verwendet(all Befehl)

# Makefile in einem Unterverzeichnis
include ../Makefile.rules

OBJ = datei1.o datei2.o datei3.o datei4.o datei5.o

all: $(OBJ)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly