Forum: PC-Programmierung Makefile für gesamten Ordner


von mark (Gast)


Lesenswert?

Hi Leute,
ich habe in meinem Ordner mehrere *.c Files welche auch alle eine 
eigenständige executable ergeben. Nun wollte ich das ganze auf "make" 
umstellen.
Für ein makefile funktioniert das auch bestens, nun möchte ich aber mit 
einem make, alle neuen *.c neu compilieren (und wie gesagt, in 
unterschiedliche ausführbare Dateien.)
Geht das, ohne dass ich source1, source2, ... eingeben muss?
1
TARGET   = source1
2
3
SRC      = source1.c
4
5
HEADER   =
6
7
OBJ      = $(SRC:%.c=%.o)
8
9
CFLAGS   = -Wall
10
11
LNKFALGS =
12
13
CC =     gcc
14
RM =     rm -f
15
16
%.o: %.c $(HEADER)
17
  $(CC) $(CFALGS) -c $< -o $@
18
19
$(TARGET): $(OBJ)
20
  $(CC) $(LNKFLAGS) $(OBJ) -o $(TARGET)
21
22
all: $(TARGET)
23
24
clean:
25
  $(RM) $(OBJ)
26
27
# $(TARGET)  #Remove executable

von Klaus W. (mfgkw)


Lesenswert?

GNU-make?
Da geht es z.B. so:
1
# alle *.c finden:
2
SRC=$(wildcard *.c)
3
4
# alle OBJ
5
OBJ=$(SRC:%.c=%.o)
6
7
# alle Programme
8
TARGETS=$(SRC:%.c=%)
9
10
# implizite Regel, um aus eine *.c zu kompilieren:
11
.c.o:
12
  gcc -Wall -c $< -o $@
13
14
# implizite Regel, um aus einer .obj ein Programm zu machen:
15
.o:
16
  gcc -Wall $< -o $@
17
18
# alles bauen:
19
all: $(TARGETS)
20
21
# testweise ausgeben:
22
default:
23
  @echo alle src sind $(SRC)
24
  @echo alle obj sind $(OBJ)
25
  @echo alle exe sind $(TARGETS)

von Klaus W. (mfgkw)


Lesenswert?

ALternativ könnte man auch im Makefile eine Schleife über eine Liste 
machen, um entsprechend viele explizite targets erzeugen, aber das Obige 
ist wohl einfacher.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.