Я не уверен, что это удовлетворит ваши требования, но здесь идет:
parent.make:
export myfunc1 = my arg is $1
export myfunc2 = $(value myfunc1)
$(info parent testing myfunc1: $(call myfunc1,parent))
all: ; $(MAKE) -f child.make
child.make:
$(info child testing myfunc2: $(call myfunc2,child))
nullrule: ; @true
EDIT:
Хорошо, как насчет этого:
child.make:
myfunc1=$(myfunc2)
$(info child testing myfunc1: $(call myfunc1,child))
nullrule: ; @true
EDIT:
Не так быстро. Посмотрите на это:
parent.make:
myfunc_base = my arg is $1
export myfunc = $(value myfunc_base)
$(info parent testing myfunc: $(call myfunc_base,parent))
all: ; @$(MAKE) -f child.make
child.make:
$(info child testing myfunc: $(call myfunc,child))
nullrule: ; @$(MAKE) -f grandchild.make
grandchild.make:
$(info grandchild testing myfunc: $(call myfunc,grandchild))
nullrule: ; @true
Это работает без каких-либо изменений child.make
или grandchild.make
. Требуется, чтобы parent.make
звонил myfunc_base
, а не myfunc
; если это проблема, есть способ обойти ее, может быть, больше, чем один.
Одна возможность, мы перенесем определение в любые вызовы parent
, где оно вообще не будет вызываться:
grandparent.make:
myfunc_base = my arg is $1
export myfunc = $(value myfunc_base)
all: ; @$(MAKE) -f child.make
parent.make:
$(info parent testing myfunc: $(call myfunc,parent))
all: ; @$(MAKE) -f child.make
Я понимаю, что это может быть неосуществимо, так как определение myfunc
может потребовать других вещей, определенных в parent.make
. Посмотрите, подойдет ли это вашей ситуации; может быть другой путь ...