2010-04-24 6 views

답변

41
SRCS = $(wildcard *.c) 

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

all: $(PROGS) 

%: %.c 

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

마지막 간격은 실제로 탭입니다. –

+0

@ 마틴 브릴리언트! 하지만 나는 왜 당신이 메인 라인에서 PROGS와 SRCS를 부르지 않는지 이해하지 못한다. –

+0

@ user4050, 죄송합니다. 질문을 놓쳤습니다. 기본'all' 타겟은'$ (PROGS)'를 만들고, 메인 라인은'% .c' 파일에서'$ (PROGS)'가되는 확장자없이 파일을 만드는 법을 말합니다. $ (SRCS)'는 있습니다. –

7

당신은 심지어 메이크 필요 - 기본 암시 메이크업 규칙을 수행해야합니다

$ 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 

편집 좀 더 간단한 명령 줄을 만들 수 있습니다. "깨끗한"대상을 추가하여 마틴 Broadhurst의 답변을 향상

4
SRCS = $(wildcard *.c) 

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

all: $(PROGS) 

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

. "make clean"은 모든 실행 파일을 지 웁니다.

+0

'.'와 같은 타겟에는'. PHONE'을 사용해야합니다. 이유는 http://stackoverflow.com/questions/2145590/what-is-the-purpose-of-phony-in-a-makefile을 참조하십시오. –

+0

@MartinBroadhurst 타겟'all'에도'.PHONY'를 사용해야합니다. – iBug

관련 문제