POSIX 中目标的导出变量

Export variable for a target in POSIX Make

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

但这需要再次进行额外调用。有没有更好的方法?

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

make X=42

这样:

  1. make X 变量已定义并设置为 42,即使它在 Makefile 中设置为另一个值。
  2. shell 环境变量 X 已定义并为所有配方设置为 42。

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

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

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