[makefile] 확인 : 명령이 실패한 후 계속하는 방법?

명령 이 중지되는 $ make all등의 오류를 제공 rm: cannot remove '.lambda': No such file or directory합니다. rm-not-found-errors를 무시하고 싶습니다. 어떻게 강제로 만들 수 있습니까?

메이크 파일

all:
        make clean
        make .lambda
        make .lambda_t
        make .activity
        make .activity_t_lambda
clean:
        rm .lambda .lambda_t .activity .activity_t_lambda

.lambda:
        awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda

.lambda_t:
        paste .lambda t_year > .lambda_t

.activity:
        awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity

.activity_t_lambda:
        paste .activity t_year .lambda  | sed -e 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex



답변

-i깃발 (또는 --ignore-errors)을 보십시오 . 이 문서 는 다음과 같은 방법으로 더 강력한 방법을 제안합니다.

명령 행에서 오류를 무시하려면 -행 텍스트의 시작 부분 (초기 탭 뒤)에 a 를 쓰 십시오. 는 -명령이 실행 쉘에 전달되기 전에 삭제됩니다.

예를 들어

clean:
  -rm -f *.o

이 원인 rm은 파일을 제거 할 수없는 경우에도 계속.

모든 예제는와 함께 rm있지만 오류를 무시해야하는 다른 명령 (예 :)에 적용 할 수 있습니다 mkdir.


답변

make -k(또는 --keep-goinggnumake에서) 당신이 요구하는 것을 할 것입니다.

실제로 실패한 델 또는 rm 라인을 찾아서 -f그 에러가 다른 사람에게 발생하지 않도록 a 를 추가 해야합니다.


답변

깨끗하게 변경

rm -f .lambda .lambda_t .activity .activity_t_lambda

즉, 제거를 요구하지 않습니다. 파일이 존재하지 않으면 불평하지 마십시오.


답변

명령을 사용 rm하여 파이프 뒤의 리턴 코드 를 차단하여 성공적으로 true리턴 0( 항상 리턴 (성공))

rm file | true


답변

한 줄에서 실제로 오류를 무시하게 ; true하려면 반환 값을 0으로 설정하여 접미사 를 붙이면됩니다. 예를 들면 다음과 같습니다.

rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true

그러면 stderr 출력이 null로 리디렉션되고 true로 명령을 따라갑니다 (항상 0을 반환하여 make는 실제로 발생한 상황에 관계없이 명령이 성공했다고 믿게 함). 프로그램 흐름을 계속할 수 있습니다.


답변

귀하의 불만 사항이 변경 되지 clean않도록 변경하십시오 rm.

clean:
    rm -f .lambda .lambda_t .activity .activity_t_lambda


답변

명령에 -f옵션을 넣으십시오 rm.

rm -f .lambda .lambda_t .activity .activity_t_lambda