0

我正在使用一个makefile,其中有一行

VAR=$(MVAR) command1;

现在,当 command1 执行时,我希望 VAR 保留 MVAR 分配的值,这是成功完成 command1 所必需的。但不幸的是,VAR 在执行 command1 时包含一些默认值,即 VAR 在执行 command1 时无法保持分配期间分配的值。

如果我在任何 shell 中运行相同的命令,则保留 VAR 的值并且 command1 成功执行。

几乎尝试了一切在makefile上运行它。有人可以解释一下 gnu makefile 中这种行为背后的原因和可能的解决方案。我使用 Linux 作为操作系统,使用 ksh 作为 Makefile 的外壳。

4

3 回答 3

0

如果您在谈论规则中的命令,只需添加(或移动)一个分号:

VAR=$(MVAR); command1

但我怀疑可能涉及更多。如果这不起作用,请给我们更多的上下文(例如 makefile 和一些关于 的信息command1)。

于 2013-03-18T19:59:38.773 回答
0

您是否尝试过 VAR:=$(MYVAR)?(即:=代替=

这迫使 VAR 立即被赋值,而不是被懒惰地评估。

于 2013-03-29T23:02:38.930 回答
0

您希望MYVAR设置什么样的东西?如果它包含对 shell 有意义的空格或其他字符,那么您正在执行的操作将不起作用。您可以尝试引用它:

        VAR='$(MVAR)' command1

看看是否效果更好。

此外,这取决于您的 shell 是标准 POSIX bourne-shell 衍生工具(sh、bash、ksh、zsh 都符合条件;Windows cmd 处理器没有)。

于 2013-03-18T22:39:46.793 回答