
Makefile の行に関して質問があります。ローカルにインストールされたテスト/ステージング サーバーを「クリーンアップ」するターゲットがあります。現在は次のようになっています。
clean:
rm -rf $(LOCAL_SERVER_PATH)/*
LOCAL_SERVER_PATH
変数が定義されていて、このようになっている限り/srv/www/htdocs
、すべて問題ありません。しかし、ユーザーが誤って変数定義を誤って入力したり、何らかの設定手順が間違っていたりして、間違った定義で Makefile が作成された場合はどうなるでしょうか。
本質的に、私は誤って定義されていない になってしまい$(LOCAL_SERVER_PATH)
、ターゲットが次のようになってしまうのではないかと懸念しています。
clean:
rm -rf /*
Makefile をリファクタリングして、このようなエラーに対してより堅牢にすることは可能ですか? Linux インストール全体 (または、ユーザーが「root」ではないため、一部) を消去してしまう可能性のある Makefile を作成したくありません。
答え1
前述のように、変数が空でないことを確認します。
clean:
test -n "$(LOCAL_SERVER_PATH)" && rm -rf $(LOCAL_SERVER_PATH)/*
同じイディオムは、多数のRPM仕様ファイルで見られ、変数がBUILD_ROOT
未設定であることが知られているようです。その代替手段は普遍的に利用可能ではないため(しばらく前のコメントにもかかわらず)、Re: [Fedora-packaging] buildroot を段階的に廃止しますか?)は、今でもあちこちで見ることができます。
答え2
コマンドを使用する代わりにtest
、Makefile 内の変数をテストして異なる動作をさせることができます。たとえば、ユーザーにエラーを表示して、Makefile の実行を拒否します。
ifeq (,$(LOCAL_SERVER_PATH))
$(error Set LOCAL_SERVER_PATH variable to run this Makefile)
endif