2013-09-05 2 views
0

내 메이크 파일이 모든 * .o 파일을 남겨두고있는 이유를 알아 내려고하고 있습니다. clean: 부분은 분명히있다 : 나는 운이없이 RM은 할 -f 및 여러 가지 다른 매개 변수를 추가하려고했습니다메이크 파일이 모든 내용을 정리하지 못함

rm *.o *.s *.bc fib fact1 fact2 *~

. 이것들이 제거되지 않게하는 원인은 무엇입니까? 다음은 전체 메이크 파일입니다. 나는

make -f Makefile 
OFILES= fib.o 
OFILES1= fact1.o 
OFILES2= fact2.o 
CPATH=~/cse/llvm/bin/ 
LLVMASY=$(CPATH)llvm-as 
LLVMOPT=$(CPATH)opt 
LLVMLC=$(CPATH)llc 
AS=clang -c 
LD=clang 

all: fib fact1 fact2 

fib: $(OFILES) 
     $(LD) $(OFILES) $(LIBS) -o [email protected] 

fact1: $(OFILES1) 
     $(LD) $(OFILES1) $(LIBS) -o [email protected] 

fact2: $(OFILES2) 
     $(LD) $(OFILES2) $(LIBS) -o [email protected] 

%.o : %.s 
     $(AS) $< -o [email protected] 

%.s : %.bc 
     $(LLVMLC) $< -O=3 -tailcallopt -o [email protected] 

%.bc : %.llvm 
     $(LLVMASY) $< -o [email protected] 

clean: 
     rm *.o *.s *.bc fib fact1 fact2 *~ 

편집


로 전화 : 나는 * .S의 모든과 * .bc 파일이 성공적으로 제거하는 것이 추가해야합니다. 그대로 유지되는 * .o 파일뿐입니다.


면책 조항 :이 숙제 그러나 이것은 내가에 대한 평가되고있어 일부가 아닙니다. 제 질문은 순수한 호기심에서 비롯된 것입니다.

+0

.o'가 제공 *'의 LS의 -ls를 무엇? –

+0

fact1.o fact2.o fib.o – fix

+0

이것은'ls -ls * .o'의 출력이 아닙니다. 소유자, 사용 권한, mtime이있는 각 파일마다 한 줄씩 있어야합니다.'ls '에 대한'-ls' 옵션이 중요합니다. 또는'/ bin/ls -l -s * .o'를 시도하고 그에 따라 질문을 편집하십시오. –

답변

4

을 사용하여 make을 호출하는 경우 clean 대상을 호출하지 않으면 첫 번째 (all) 대상이 호출됩니다.

시도 :

$ make clean 
+0

"make clean"은 나머지 파일을 성공적으로 제거합니다. 이제 "make -f Makefile"이 전체 rm 함수를 수행하지 않기 때문에 Makefile을 제대로 호출해야하는 지 궁금합니다. 나는 교수님이 우리의 .zip에서 원했기 때문에 대본으로 모두 등급을 매길 수 있다고 들었습니다. – fix

+0

@fix'-f Makefile' 부분을 잊어 버리십시오. 기본값으로 두 가지 타겟'all'을 사용하여 빌드하고'clean'을 사용하여 정리해야합니다. 자체적으로'make '도'all'을 호출합니다. 귀하의 질문은 이제 말이되지 않습니다; 파일을 대화식으로 제거 할 수 있다고 (허가 문제 없음) 말하지만,'make clean '은'.o' 파일을 제거하지 않습니다. 누락 된 것이 있으며 그것이 무엇인지 알 수 없습니다. – trojanfoe

+0

아니요. 나는 "깨끗하게"라고 .o 파일을 삭제했다. – fix

0

아마도 clean 파일이 이미 있습니다. ls -l clean으로 확인한 다음 터미널에 rm -v clean을 입력하십시오.

또한 이러한 파일의 소유권은 /bin/ls -l -s *.o으로 확인하십시오. 어떤 시점에서 sudo make을 수행 한 경우 루트 소유 일 수 있으므로 일반 사용자가 rm이 될 수 없습니다.

BTW, makeMakefileif it has one (이 순서대로 GNUmakefile, makefileMakefile 시도).의 -f Makefile가 종종 있으므로 필요하지를 사용합니다.

documentation of GNU make을 읽으십시오.

clean.PHONY target이어야합니다. 당신의 Makefile

Makefile -s의 기본 목표는 첫 번째 그래서 all입니다 (디버깅하는 remake -x (또는 귀하의 경우 remake -x clean)로 아마, 당신의 clean: 규칙

.PHONY: clean 

사용도 remake 전에 추가 귀하의 경우에는 .PHONY BTW라고 표시해야합니다). 청소하려면 make clean을 실행하십시오.

+0

내 질문에 편집을 추가했습니다. 커맨드의 다른 모든 파일 확장자에 대해 clean이 작동한다고 말하는 것을 잊었습니다. 삭제하지 않는 것은 .o뿐입니다. 나는이 Makefile이 여러 명의 학생들로부터 자동 등급을 매기는데 교수가 필요하다고 생각한다. – fix

+0

'Makefile'은 소프트웨어를 만드는 데 유용합니다. 그리고 (make를 사용하거나 다른 빌더를 사용하는 것이 C 또는 C++의 실제 프로그래밍 프로젝트에서 필수적이기 때문에) 더 많은 것을 배우려면 시간이 필요합니다. GNU make는 훌륭한 튜토리얼 부분을 가지고있다. –

관련 문제