2012-06-15 1 views
1

-f 플래그를 사용하고 있어도 삭제할 파일이 없으면 내 프로젝트의 많은 makefile 중 하나가 오류 콘솔에 오류를 표시합니다. 내가 줄의 시작 부분에 대시를 제거하면 다음 메이크rm -f 및 makefile

-rm -f *.o

에서 잘못된 라인이다, 그것의 트랙에서 죽은 중지 - 그래서이 오류를 생성하는 것 줄 것을 알고있다.

이것은 메이크 파일이 12 개 정도되는 큰 프로젝트입니다. 내가 이해하지 못하는 것은 다른 사람들의 일부는이 문제를 가지지 않는다는 것입니다.

이것은 임베디드 프로그래밍 세계입니다 - 저는 WindRiver 2.6을 사용하고 있습니다 (rm 유틸리티는 "rm.EXE"이므로 일반적인 옵션이있는 것 같습니다).

"rm -f"호출이 아무 것도 없으면 오류가 발생하는 이유를 아는 사람이 있습니까?

+0

오류 메시지가 무엇입니까? –

+0

C : \ WindRiver22 \ workbench-2.6 \ x86-win32 \ bin \ rm.EXE :'* .sm '을 (를) 제거 할 수 없습니다. 잘못된 인수 –

답변

1

저는 WindRiver 도구에 익숙하지 않지만, 일반적인 유닉스 셸과 make 도구의 동작을 기반으로 한 숙련 된 추측입니다.

  • 쉘이 일치하는 파일이없는 경우 (이러한 파일을 포함하지 않는 디렉토리에 echo *.o을 발행하려고 그대로두고 *.o을 확장하려고하고 : 당신이 rm -f *.o 실행하면

    는 다음과 같은 상황이 발생 이러한 파일 하나) 확장의

  • 결과는 rm에 전달되기 때문에 일치하는 파일이없는 경우, rm는 인수로서 리터럴 문자열 *.o 불려
  • rm은 패턴을 확장하지 않고 인수로 인수를 경로 이름으로 해석합니다 (쉘의 작업이기 때문에). 파일이 오류 메시지에서

찾을 수없는 경우 -f가 그것을 종료, 그것은처럼 보이는 당신의 rm*.o라는 어떤 파일을 찾을 수없는 경우에 여전히 불만 점에서 나뉩니다. 먼저 패턴과 일치하는 파일이 있는지 확인하여이 문제를 해결할 수 있습니다. 나는 당신의 환경에서 그렇게하는 법을 모른다는 것을 인정해야합니다.

+0

매우 합리적인 것 같습니다. 파일이 처음으로 존재하는지 확인하려면 어떻게합니까? 나는 메이크 파일을 한번도 해본 적이 없다 ... –

+0

나는 그것을 발견했다고 생각한다 : rm -f $ (와일드 카드 * .sm) ... 그게 효과가있다 ...당신이 그것을 리터럴 "* .o"로 해결했다고 말했을 때 (마침내!) 작동하도록했습니다 ... 여전히 "rm -f"를 인쇄하지만 에러가 없습니다 :) 감사합니다! –

+0

명령 앞에 @를 추가하면 실행 된 명령 줄이 인쇄되지 않습니다 – ThePosey

0

Windows 환경에서는 "* .o"를 확장 할 수 없으며 실제로는 에서 cygwin까지 rm 명령으로 보내면 오류 종료 코드로 실패합니다. Windows의 cmd 명령 프롬프트에서 동일한 인수로 OK를 완료하는 것처럼 보이기 때문에 rm.exe을 실행하는 동안보기가 어렵습니다.

해결책은 makefile에 $(wildcard *.o)을 사용하는 것입니다. "*"를 사용하는 것이 중요합니다. 그렇지 않으면 파일이 존재하더라도 확장되지 않습니다. 그 결과

는 메이크업 파일의 라인은 모양이 비슷합니다 :

rm -f $(wildcard *.o) $(wildcard *.elf) $(wildcard *.lst) $(wildcard *.map) $(wildcard *.sym) $(wildcard *.lss) $(wildcard *.eep) $(wildcard *.srec) $(wildcard *.bin) $(wildcard *.hex) $(wildcard *.tmp.sh)