Makefile에서 "rm"을 사용하지 마세요.

Makefile에서 "rm"을 사용하지 마세요.

Makefile의 한 줄에 관한 질문이 있습니다. 로컬에 설치된 테스트/스테이징 서버를 "정리"할 목표가 있습니다. 현재는 다음과 같습니다.

clean:
    rm -rf $(LOCAL_SERVER_PATH)/*

변수가 LOCAL_SERVER_PATH정의되고 /srv/www/htdocs다음과 같으면 모든 것이 정상입니다. 하지만 ... 사용자가 실수를 해서 변수 정의를 잘못 입력했거나 일부 구성 단계가 잘못되어 Makefile이 잘못된 정의로 생성된 경우 어떻게 될까요?

본질적으로 실수로 정의되지 않은 결과가 나올 수 $(LOCAL_SERVER_PATH)있고 내 목표는 다음과 같은 결과를 낳을 수 있다는 것이 두렵습니다.

clean:
    rm -rf /*

이러한 오류에 대해 더 강력하게 만들기 위해 Makefile을 리팩토링하는 것이 가능합니까? 나는 전체 Linux 설치(또는 내 사용자가 '루트'가 아니기 때문에 그 일부)를 잠재적으로 지울 수 있는 Makefile로 끝나고 싶지 않습니다.

답변1

언급한 대로 변수가 비어 있지 않은지 확인하십시오.

clean:
    test -n "$(LOCAL_SERVER_PATH)" && rm -rf $(LOCAL_SERVER_PATH)/*

동일한 관용구가 다수의 RPM 사양 파일에 나타나는데, 여기서 변수 BUILD_ROOT는 설정되지 않은 것으로 알려져 있습니다. 대체품은 보편적으로 사용할 수 없기 때문에 (얼마 전의 의견에도 불구하고)Re: [Fedora-packaging] buildroot를 단계적으로 중단하시겠습니까?), 아직도 여기저기서 찾아볼 수 있습니다.

답변2

명령 을 사용하는 대신 testMakefile의 변수를 테스트하고 다르게 동작할 수 있습니다. 예를 들어 사용자에게 오류를 표시하여 Makefile 실행을 거부합니다.

ifeq (,$(LOCAL_SERVER_PATH))
$(error Set LOCAL_SERVER_PATH variable to run this Makefile)
endif

관련 정보