Обернуть рекурсивно-расширенную переменную в новую с тем же именем

Я могу использовать += для добавления к рекурсивно-расширенной переменной, и это работает хорошо.

В реальном мире иногда требуется добавить или обернуть переменную в некоторый код без расширения.

Я нашел аналогичный вопрос здесь GNU make: добавьте рекурсивно расширенную переменную? Но не смог быстро изменить его для моего случая.

В основном мне нужно что-то вроде этого:

define Xdef
    @echo $(1)
endef

define Xdef
    @echo Before
    # Value of original Xdef is here. i.e. echo $(1)
    @echo After
endef

all:
    $(call Xdef,Hello world)

Со следующими результатами:

$ make
Before
Hello world
After

Спасибо.


person Sergey    schedule 09.11.2016    source источник
comment
Я не уверен, что то, что вы хотите сделать, возможно. Если вы попытаетесь сослаться на отложенную переменную в ее собственном определении, она не будет расширяться должным образом (я только что попытался сделать сбой). Если вы пытаетесь использовать непосредственное определение, переменные сразу расширяются, поэтому $(1) становится пустым.   -  person John    schedule 09.11.2016


Ответы (1)


Хорошо, вы заставили меня задуматься об этом, и это возможно, хотя это уродливо, и я бы настоятельно не рекомендовал использовать это, так как вы чертовски запутаете любого, кто попытается поддерживать make-файл. . Вы можете сделать это, создав новое определение в make-файле. Исходное определение должно быть ?=, чтобы оно не переопределяло новое определение при повторной обработке make-файла...

include new.mak

define Xdef ?=
        @echo $(1)
endef

.PHONY: all

all:
        @echo running $@
        $(call Xdef,hello world)


new.mak: Makefile
        @echo rebuilding $@
        @echo "define Xdef =" >> $@
        @echo "    @echo Before" >> $@
        @echo '$(call Xdef,\$$(1))' >> $@
        @echo "    @echo After" >> $@
        @echo "endef" >> $@

clean:
        rm new.mak
person John    schedule 09.11.2016