如何让一个包含makefile的变量在后面包含的另一个makefile中可用?

时间:2014-08-15 14:05:49

标签: makefile gnu-make

我在下面有Makefile

include settings.mk
include main.mk

其中settings.mk具有以下内容,

FOO=foo
BAR=bar

main.mk如下:

THIS_MAKEFILE:=$(lastword $(MAKEFILE_LIST))

.PHONY: all
all:
        $(MAKE) -f $(THIS_MAKEFILE) display

.PHONY: display
display:
        @echo "FOO=$(FOO)"
        @echo "BAR=$(BAR)"

问题是make all导致以下输出

FOO=
BAR=

而不是

FOO=foo
BAR=bar

如何在FOO中提供变量BARmain.mk

2 个答案:

答案 0 :(得分:1)

仅执行make -f main.mk(在all目标中)时,未设置值,因为您在没有预先阅读main.mk的情况下重新阅读settings.mk。< / p>

Makefile中,设置了变量。如果添加规则,例如:

check:
    @echo "FOO=$(FOO); BAR=$(BAR)"

Makefile,然后运行make check,您会看到确实设置了FOO和BAR。

所以,问题变成了:为什么你在做你正在做的事情 - 为什么你只是期望make -f main.mk知道在make的第二次调用的makefile中设置的东西读不懂?我认为这可能是一个XY问题。

您可以将include settings.mk添加到main.mk;这可能是有意义的(但主Makefile只需要包含include main.mk,留下你为什么同时拥有这两个问题。

答案 1 :(得分:0)

它们位于main.mk。由于您没有export编辑它们,因此它们不会在您生成的子品牌中可用。

使用$(info FOO:$(FOO)) / etc。在main.mk中,您会看到它们正确打印出来。