避免在 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 規範文件中,其中似乎BUILD_ROOT已知該變數未設定。由於它的替代品並不普遍可用(儘管不久前有評論)回覆:[Fedora 打包] 逐步淘汰 buildroot?),仍然可以在這裡或那裡找到它。

答案2

您可以測試 Makefile 中的變數並採取不同的行為,而不是使用該test命令 - 例如,向使用者顯示錯誤,因此拒絕執行 Makefile:

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

相關內容