2013-10-09 3 views
0

Minix 2.0.4를 사용하고 있으므로 gcc를 사용할 수 없습니다. 하나의 make 파일을 사용하여 여러 개의 C 프로그램을 여러 개의 대상으로 컴파일하려고합니다. "하지 변환을 적용, 컴파일 할 수 PROG2"나는 시도하고이라는 오류를 얻을처럼 내 메이크 파일을 사용할 때CC 컴파일러를 사용하여 여러 대상 파일을 컴파일 할 수 있습니까?

여기,

CFLAGS = -D_POSIX_SOURCE 
LDFLAGS = 
CC  = cc 
LD  = cc 

PROG = prog1 prog2 
OBJS = prog1.o prog2.o 

$(PROG): $(OBJS) 
     $(LD) $(LDFLAGS) $(OBJS) -o $(PROG) 

clean: 
     rm -rf $(PROG) $(OBJS) 

그러나 내 메이크의 현재 상태입니다. 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

+0

나는 이것에 대해 이미 한 번 대답했다고 생각한다. http://stackoverflow.com/questions/19213584/creating-makefile-that-compiles-multiple-c-files-for-use-in-minix –

+0

나는 그것을 생각하고 생각했다. 처음에는 작동했지만 프로그램의 첫 번째 세트 만 컴파일했습니다. 그것은 OBJ2와 PROG2를 완전히 무시했습니다. – johns4ta

+0

"make test"가 테스트를합니다. "make test2"는 test2를 만듭니다. "make"로 둘 다 만들려면 다른 질문입니다. –

답변

2

분할 그것까지이 방법 : 모든 subsitution 당신이 긴장하게되면

PROG1 = test 
PROG2 = test2 
OBJ1 = test.o 
OBJ2 = test2.o 


all: $(PROG1) $(PROG2) 

$(PROG1): $(OBJ1) 
      $(LD) $(LDFLAGS) $(OBJ1) -o $(PROG1) 
$(PROG2): $(OBJ2) 
      $(LD) $(LDFLAGS) $(OBJ2) -o $(PROG2) 

, 더 간단하게

all: test test1 

test: test.o 
     $(LD) $(LDFLAGS) test.o -o test 
test2: test2.o 
     $(LD) $(LDFLAGS) test2.o -o test2 

말 그리고 처음부터이 문제를 제거 할 수 있습니다

PROG1 = test 
PROG2 = test2 
OBJ1 = test.o 
OBJ2 = test2.o 

다른 바로 가기가 있지만 더 구체적이고 명확합니다.

+0

도움을 주셔서 다시 한 번 감사드립니다. 나는 모두를 가로 질러 달렸는데, 전에는 gcc에만 있다고 가정했다. – johns4ta

+3

이것은 대상 "all"에 특별한 의미가 없습니다. Makefile에서 첫 번째 대상이되는 것입니다. 그래서 "make"가 인자없이 만들어집니다. –

0

당신이 묻는 것만 정확하게하려면 Makefile이 전혀 필요하지 않습니다. 일반적 그런데

> ls Makefile 
ls: cannot access Makefile: No such file or directory 
> make prog1 prog2 
cc prog1.o -o prog1 
cc prog2.o -o prog2 

,

> make prog1 prog2 

은 추가 all: prog1 prog2 목표를 가지고, 그리고

일부터 미묘하게 다르다 : 당신이 원하는 것을 위해 GNU는 "내장 된 규칙"이 있는지 확인
> make all 

두 개의 연속 호출에서와 마찬가지로 전자는 첫 번째 대상을 만들고 두 번째 대상을 완전히 독립적으로 만듭니다. 두 번째로, 하나의 호출로 그들을 만든다 : 대용량 makefile의 경우 더 빠르며, 아마도 -j ...으로 호출되면 병렬 처리가 가능하고, 다른 메시지 출력이 가능할 수도있다.

관련 문제