2012-10-14 3 views
1

저는 makefile에서 상당히 새로운 것 같습니다. yu.c를 컴파일하는 makefile을 만들고 yu.c라는 링크를 실행하여 yu라는 실행 파일을 생성하려고합니다.
아래 코드는 있습니다. make -f mymakefile을 사용하여 파일을 실행하고 실행할 때마다 gcc -c yuFile.c 만 수행됩니다. 어디서 잘못 되었나요? 이 make yu.o에 해당 귀하의 경우 있도록 지정되지 대상으로makefile은 executeble 파일을 생성하지 않습니다.

CC=gcc 

yu.o: yuFile.c 
    ${CC} -c yuFile.c 
yu: yuFile.o 
    ${CC} yu -o yuFile.o 
run-c: yu 
    ./yu 
clean: 
    rm -f "*.o" core 
+1

약간 혼란 작동한다. 그러면 파일 yuFile.o가 생성되어 만족스럽지 않을 것입니다. 실제로 yuFile.o -> yuFile.o는 타겟이 내장되어 있으므로 처음에는 필요하지 않습니다. 'yu.o :'타겟을 제거하고'yu :'와'run-c :'타겟을 뒤집으십시오. 첫 번째 타겟은 기본 타겟이 될'run-c :'입니다. 'yuFile.c'를 갱신하면, Makefile은'yuFile.o'를 재 빌드하고'yu'를 링크 한 다음'run-c :'를 실행합니다. –

+0

'Makefile' -s를 디버그하는 일반적인 제안은'remake' (특히'-x' 플래그와 함께)를 사용하는 것입니다. –

답변

2

make는 파일의 첫 번째 대상을합니다.

일반적으로 그렇게 모든 것이 내장되어 첫 번째 대상 all합니다

all: yu 
.PHONY: all 

합니다 (.PHONY 이미 all라는 이름의 파일이 있는지 아무것도하지 않고에서 make을 방지합니다).

주목할 가치 : yu 타겟에서 인수가 역전되었습니다. 그것은 ($^있는 PreReqs 모두를 의미하고,는 [email protected]Automatic Variables에 설명 된대로 대상을 의미)

yu: yuFile.o 
    ${CC} yuFile.o -o yu 

이상의 총칭

yu: yuFile.o 
    ${CC} $^ -o [email protected] 

이어야한다.

+0

내 코드를 이렇게 변경했습니다. 이제 실행 파일이 생성됩니다. 하지만 연결 단계 후에 생성 된 실행 파일이 실행되기를 바랬습니다. run-c : yu ./yu가 아직 작동하지 않는 것 같습니다. 깨끗한 라인도 작동하지 않습니다. – user1559897

+0

@ user1559897 :'make'라고 타이프하면 단지 첫 번째 타겟이됩니다.이 경우에는'all'입니다. 'make '를 입력하고 프로그램을 실행 시키려면, 모든 줄을'all : run-c'로 변경하십시오. –

0

첫 번째 대상은 인수가 지정되지 않은 경우에 선택되는 대상입니다. 모든

: 표준은 먼저 '모든'목표를 가지고있다 유는

또한, 당신의 '유'대상이 올바르지 않습니다.

yo: yufile.o 
    $(CC) -o [email protected] $^ 

는 제 타겟에 대하여

+0

$ @는 무엇을 의미합니까? – user1559897

+0

여전히 잘못되었습니다. '$ @ == yu'. – nneonneo

+0

죄송합니다. $ @는 대상, $ ^은 해당 대상의 종속성입니다. – perh

관련 문제