在GNU Make中,您可以导出目标变量:
foo: export X=42
foo:
echo $$X
# Call several more commands that use $X.
在便携式POSIX Make中是否可以做到这一点?到目前为止,我发现了两种方法。首先是将所有命令基本合并为一个:
foo:
export X=42; \
echo $$X; \
# Call several more commands that use $X.
这很糟糕,因为现在所有东西都捆绑在一起了。第二种是调用$(MAKE)
:
foo:
$(MAKE) foo_ X=42
foo_:
echo $$X
# Call several more commands that use $X.
但这又有一个额外的要求。有更好的方法吗?
答案 0 :(得分:1)
最简单的解决方案可能是通过调用make with在命令行上设置变量:
make X=42
这种方式:
X
变量已定义并设置为42,即使在Makefile中将其设置为另一个值也是如此。X
,并为所有配方将其设置为42。如果您不能使用它(例如,因为是make计算值),则递归make解决方案可能是最佳选择:
ifeq ($(X),)
X := <some-make-magic>
all:
$(MAKE) X=$(X) all
else
all:
<recipe-that-uses-X-environment-variable>
endif