Как вызвать макрос GNU make, созданный с помощью define?

Есть ли разница в двух способах запуска GREP в моем Makefile? Любая причина, по которой я должен использовать ту или иную? Оба, похоже, дают тот же результат.

define GREP
$(word 3,$(shell echo "#define  FOO     0xfff00100"))
endef

all:
        @echo $(GREP)
        @echo $(call GREP)

Ответ 1

Как вы его используете, нет никакой разницы. Однако, если ваш макрос GREP является функцией, которая принимает параметры, вам придется использовать $(call) для передачи параметров на нее. Например:

define GREP
$(shell grep $1 $2)
endef

FOO:=$(call GREP,abc,words.txt)

Это приводит к замене $1 на "abc" и $2 на "words.txt".

Подробнее о GNU в руководстве GNU вы найдете здесь: http://www.gnu.org/software/make/manual/make.html#Call-Function

Надеюсь, что это поможет,

Эрик Мельский