:
- 最後から二番目の行の
[email protected]
は何の略ですか? - 中段の
|
シンボルはどうですか?
define KERNEL_RULE
$(DESTDIR)/$(1) : kernel_modules
$(DEST_DIR)/$(1) : $(DESTDIR)/$(1) | $(DEST_DIR)
cp $(DESTDIR)/$(1) [email protected]
endef
:
[email protected]
は何の略ですか?|
シンボルはどうですか?define KERNEL_RULE
$(DESTDIR)/$(1) : kernel_modules
$(DEST_DIR)/$(1) : $(DESTDIR)/$(1) | $(DEST_DIR)
cp $(DESTDIR)/$(1) [email protected]
endef
(あなたは変数名の嘆かわしい選択肢を持っている;のはSOURCE_DIR
へDESTDIR
を変更し、一人でDEST_DIR
を残してみましょう。)
は、あなたが通常のルール書いていたとします
$(DEST_DIR)/foo : $(SOURCE_DIR)/foo
cp $(SOURCE_DIR)/foo $(DEST_DIR)/foo
を
それは動作しますが、冗長性は面倒です。遅かれ早かれ、preqに$(DEST_DIR)/foo
を変更しますが、ルール内で変更することは忘れないでください。そしてルールは読みにくいです。だから我々はautomatic variableに入れる:
$(DEST_DIR)/foo : $(SOURCE_DIR)/foo
cp $(SOURCE_DIR)/foo [email protected]
をこのルールが実行されると、[email protected]
は、ターゲットの名前、$(DEST_DIR)/foo
に展開されます。 (私たちは、それよりもさらに良いの操作を行いますが、さんはそこに停止させることができます。)
を今、私たちはこのルールを実行する前に$(DEST_DIR)
が存在するが、ので、我々は、それは正確に前提条件であることをを望んでいないことを確認しますそのディレクトリの不在は、このルールを実行させるのに十分ではないはずです。だから我々は作ることorder-only prerequisite:
$(DEST_DIR)/foo : $(SOURCE_DIR)/foo | $(DEST_DIR)
cp $(SOURCE_DIR)/foo [email protected]
は、今、私たちは異なるターゲットのために、このような多くのルールをしたいし、代わりにそれthe smart wayを行うので、私たちはその場でルールを作成するための"canned recipe"、ソートのテンプレートを使用します。
# This won't work
define KERNEL_RULE
$(SOURCE_DIR)/$(1) : kernel_modules
$(DEST_DIR)/$(1) : $(SOURCE_DIR)/$(1) | $(DEST_DIR)
cp $(SOURCE_DIR)/$(1) [email protected]
endef
問題は、私たちが、この定義を評価する際に、[email protected]
が展開されることであり、それはまだないルールがあるため、それが何に展開されます。だから我々は[email protected]
のように変更します。
# This will work
define KERNEL_RULE
$(SOURCE_DIR)/$(1) : kernel_modules
$(DEST_DIR)/$(1) : $(SOURCE_DIR)/$(1) | $(DEST_DIR)
cp $(SOURCE_DIR)/$(1) [email protected]
endef
メイクが[email protected]
が[email protected]
に展開、この定義を呼び出すとき、それはルールを実行する場合は、/場合は、[email protected]
は、ターゲットの名前に展開されます。
私はもう一度会います、そして、私は嫌なupvoteを認めなければなりません。注文のみの前提条件に関するものは特に優れています。 –
@JackKelly、あなたの苦いと恨みの譲歩は、顔のない群衆から100ポイントよりも私にとって貴重です。 – Beta