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
这样:
- make
X
变量已定义并设置为 42,即使它在 Makefile 中设置为另一个值。
- 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
在 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
这样:
- make
X
变量已定义并设置为 42,即使它在 Makefile 中设置为另一个值。 - 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