2010-04-24 16 views

cevap

41
SRCS = $(wildcard *.c) 

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

all: $(PROGS) 

%: %.c 

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

Son boşlukların aslında bir sekme olduğunu hatırlatmakla. –

+0

@Martin parlak! Ama neden ana hattaki PROGS ve SRCS'yi aramıyorsunuz anlamıyorum. –

+0

@ user4050, üzgünüm, sorunuzu kaçırdım. Varsayılan 'all' hedefi '$ (PROGS)' oluşturur ve ana satır bir uzantı olmadan dosyaların nasıl oluşturulacağını söyler, hangi '$ (PROGS)' ''. $ (SRCS) 'dır. –

7

hatta bir makefile ihtiyaç - Varsayılan örtülü yapmak kuralları bunu yapmalıdır:

$ 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 

Düzenlendi biraz daha basit komut satırı yapmak.

4
SRCS = $(wildcard *.c) 

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

all: $(PROGS) 

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

Martin Broadhurst'un "temiz" hedefi ekleyerek yanıtını iyileştirme. "Temiz olun" tüm çalıştırılabilir temizler.

+0

'clean' gibi bir hedef için' .PHONY' kullanmalısınız. Nedeni için http://stackoverflow.com/questions/2145590/what-is-the-purpose-of-phony-in-a-makefile adresine bakın. –

+0

@MartinBroadhurst Ayrıca "all" hedefi için bir .PHONY 'kullanmalısınız. – iBug

İlgili konular