在POSIX Make中导出目标的变量

时间:2018-09-20 14:19:02

标签: makefile environment-variables posix

在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.

但这又有一个额外的要求。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

最简单的解决方案可能是通过调用make with在命令行上设置变量:

make X=42

这种方式:

  1. make X变量已定义并设置为42,即使在Makefile中将其设置为另一个值也是如此。
  2. 已定义外壳环境变量X,并为所有配方将其设置为42。

如果您不能使用它(例如,因为是make计算值),则递归make解决方案可能是最佳选择:

ifeq ($(X),)
X := <some-make-magic>

all:
    $(MAKE) X=$(X) all
else
all:
    <recipe-that-uses-X-environment-variable>
endif