如何从makefile规则导出变量?

Eug*_*kov 6 bash shell makefile

我的Makefile规则中有哪些设置环境:

.ONESHELL:
set_db_env:
    export DB_USER=XXX
    export DB_PASS=YYY   
Run Code Online (Sandbox Code Playgroud)

我可以重用set_db_env目标吗?

another_rule: set_db_env
    echo ${DB_USER}
Run Code Online (Sandbox Code Playgroud)

我也找到了.EXPORT_ALL_VARIABLES但不明白如何使用它。

UPD
我发现这有效:

$(shell ${APP} db_env > ${CONF_DIR}/db_env.conf)
include ${CONF_DIR}/db_env.conf
Run Code Online (Sandbox Code Playgroud)

但我不认为这是一个好方法

Bet*_*eta 8

一般来说,变量不会从一个规则传递到另一规则。但是有一种方法可以使用特定于目标的变量来做到这一点:

another_rule: DB_USER=XXX
another_rule: DB_PASS=YYY                              

another_rule:
    @echo user is ${DB_USER}
    @echo pass is $(DB_PASS)
Run Code Online (Sandbox Code Playgroud)

如果为每个规则编写这么多额外的行太乏味,您可以将它们包装在一个函数中:

define db_env
$(1): DB_USER=XXX
$(1): DB_PASS=YYY
endef

$(eval $(call db_env,another_rule))
another_rule:
    @echo user is ${DB_USER}
    @echo pass is $(DB_PASS)
Run Code Online (Sandbox Code Playgroud)