Makefile で GREP を呼び出す 2 つの方法に違いはありますか? どちらかを使用する必要がある理由はありますか? どちらも同じ結果になるようです。
define GREP
$(word 3,$(shell echo "#define FOO 0xfff00100"))
endef
all:
@echo $(GREP)
@echo $(call GREP)
使用方法に違いはありません。ただし、GREP マクロがパラメーターを取る関数である場合は、$(call) を使用してパラメーターを渡す必要があります。例えば:
define GREP
$(shell grep $1 $2)
endef
FOO:=$(call GREP,abc,words.txt)
これにより$1
、「abc」$2
と「words.txt」に置き換えられます。
ユーザー定義関数に関する GNU make マニュアルの詳細を参照してください: http://www.gnu.org/software/make/manual/make.html#Call-Function