【发布时间】:2012-09-14 10:50:46
【问题描述】:
我基本上是在寻找一个有问题的 makefile,这让我对以下情况感到困惑。
default:
echo "Build started with $@ at $(ENV_VAR)";\
ENV_VAR=$(NEW_DIR); \
cd $(ENV_VAR); \
$(MAKE);
程序员的目标:
基本上,程序员打算用新值(目录路径)NEW_DIR 覆盖环境变量 ENV_VAR,然后在该目录中递归执行 make。 p>
此 makefile 中的错误:
我看到的错误是编码器使用了 "cd $(ENV_VAR)" 而不是 "cd $$(ENV_VAR)"。因此,正因为如此,我们实际上并没有为“cd”命令使用覆盖的 make 变量,而是在执行 $(MAKE) 之前仍然使用环境变量的值。由于路径不存在,cd 命令也失败了。最后我们进行了递归。
我的问题
正如我在上一段中提到的,我们处于递归 make 的场景中。有趣的是,当第二次调用同一个目标时,我看到 $(ENV_VAR) 以反映 NEW_DIR 的覆盖值。这让我感到困惑。
样本输出:
假设:
NEW_DIR=/new-dir OLD-DIR=/old-dir
输出:
Build started with default at /old-dir
bin/sh /old-dir: no such file (or) directory
Build started with default at /new-dir
请对此提出任何建议。
【问题讨论】:
标签: makefile