避免在 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 以使其更能抵御此类错误?我不想最终得到一个 Makefile,因为它可能会抹去我的整个 Linux 安装(甚至是其中的一部分,因为我的用户不是“root”)。

答案1

如上所述,检查变量以确保它不为空:

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

相同的习惯用法出现在大量 RPM spec 文件中,似乎已知BUILD_ROOT变量已被取消设置。由于它的替换不是普遍可用的(尽管前段时间的评论回复:[Fedora-packaging] 逐步淘汰 buildroot?),至今仍可在此处或彼处发现。

答案2

除了使用test命令之外,您还可以测试 Makefile 中的变量并采取不同的行为 - 例如向用户显示错误,从而拒绝运行 Makefile:

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

相关内容