特定の前提条件が満たされない場合、$(error ...)
を使用してメイクプロセスを中止します。 fails_to_work
ターゲットは、失敗すると打ち切ります。test -d /foobar
BAD.mk
all: this_works fails_to_work
this_works:
@echo echo works...
@test -d ~ || echo ~ is not a directory
@test -d /foobar || echo /foobar is not a directory
fails_to_work:
@echo error does not work...
@test -d ~ || $(error ~ is not a directory)
@test -d /foobar || $(error /foobar is not a directory)
$は、あなたが見ることができるように、いなくても "エラーが動作しません..." BAD.mk
echo works...
/foobar is not a directory
BAD.mk:9: *** ~ is not a directory. Stop.
-f作る画面に表示されます。 fails_to_work
のレシピが開始される前に失敗します。これをどうすれば解決できますか?私のユースケースの1つは@test -d $(MY_ENV_VAR)
ですが、この例ではハードコーディングされたパスとは異なるとは思われません。
UPDATE $あなたは条件付きで動作しない、メイクファイルのものを呼び出すために、レシピにシェルのものを取得しようとしている--version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
ありがとうございました。あなたの最初の提案はうまくいきます( 'if!test -d/foobar; then echo/foobarはディレクトリではありません; exit 1; fi')。有効なディレクトリでは、エラーは依然として発生しています。 –