【发布时间】:2018-09-20 14:19:01
【问题描述】:
在 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 变量?例如,您可以将
echo $$X替换为echo $(X)。注意:我很惊讶您的第二个解决方案(使用递归 make)有效。 -
我调用的命令是从环境中读取
X的值,所以这不起作用,除非我执行export X=$(X); cmd1之类的操作。 -
我明白了。最简单的解决方案可能是通过使用
make X=42调用make 在命令行上设置变量。这样 1. 定义 makeX变量并将其设置为 42,即使它在 Makefile 中设置为另一个值 2. 定义 shell 环境变量X并将所有配方设置为 42。如果你不能使用它(例如,因为它是计算值的 make)递归 make 解决方案可能是最简单的。注意:忘记我之前评论的最后一部分,我没有认真阅读您的问题。 -
介意转发您的评论作为答案吗?如果没有更好的答案,我会在几天后接受。
-
完成。我最近answered 至少还有一个关于这些 make - shell 变量交互的问题。还有another one。也许你会在那里找到有用的东西?我记得MadScientist 也回答了类似的问题,如果你能找到的话。
标签: makefile environment-variables posix