2010-04-24 9 views

Odpowiedz

41
SRCS = $(wildcard *.c) 

PROGS = $(patsubst %.c,%,$(SRCS)) 

all: $(PROGS) 

%: %.c 

     $(CC) $(CFLAGS) -o [email protected] $< 
+6

Przy przypomnieniu, że końcowy odstęp jest w rzeczywistości zakładką. –

+0

@Martin brilliant! Ale nie rozumiem, dlaczego nie wywołujesz PROGS i SRCS w głównej linii. –

+0

@ user4050, przepraszam, przegapiłem twoje pytanie. Domyślny cel 'all' buduje' $ (PROGS) ', a główna linia mówi, jak budować pliki bez rozszerzenia, czyli czym jest' $ (PROGS) 'z plików'% .c', co jest tym, co ' $ (SRCS) 'są. –

7

Nie sądzę nawet trzeba makefile - domyślne reguły ukryte make powinno wystarczyć:

$ ls 
src0.c src1.c src2.c src3.c 
$ make `basename -s .c *` 
cc  src0.c -o src0 
cc  src1.c -o src1 
cc  src2.c -o src2 
cc  src3.c -o src3 

Edited by wiersza poleceń trochę prostsze.

4
SRCS = $(wildcard *.c) 

PROGS = $(patsubst %.c,%,$(SRCS)) 

all: $(PROGS) 

%: %.c 
     $(CC) $(CFLAGS) -o [email protected] $< 
clean: 
     rm -f $(PROGS) 

Poprawa odpowiedzi Martina Broadhursta poprzez dodanie "czystego" celu. "make clean" wyczyści wszystkie pliki wykonywalne.

+0

Powinieneś użyć '.PHONY' dla celu takiego jak' clean'. Zobacz http://stackoverflow.com/questions/2145590/what-is-the- purpose-of-phony-in-a-makefile z tego powodu. –

+0

@MartinBroadhurst Należy również użyć '.PHONY' dla celu' all'. – iBug

Powiązane problemy