我在下面有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
中提供变量BAR
和main.mk
?
答案 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
中,您会看到它们正确打印出来。