我基本上正在研究一个有问题的 makefile,这让我对以下情况感到困惑。
default:
echo "Build started with $@ at $(ENV_VAR)";\
ENV_VAR=$(NEW_DIR); \
cd $(ENV_VAR); \
$(MAKE);
程序员的目标:
基本上,程序员打算用新值(目录路径)NEW_DIR覆盖环境变量ENV_VAR,然后在该目录中递归执行 make。
此生成文件中的错误:
我看到的错误是编码器使用了"cd $(ENV_VAR)"而不是"cd $$(ENV_VAR)"。因此,正因为如此,我们实际上并没有为“cd”命令使用覆盖的 make 变量,而是在执行 $(MAKE) 之前仍然使用环境变量的值。由于路径不存在,cd 命令也失败了。最后我们最终做了一个递归 make。
我的问题
正如我在上一段中提到的,我们处于递归 make 的场景中。有趣的是,我看到的是当第二次调用同一个目标时,我看到 $(ENV_VAR) 以反映 NEW_DIR 的覆盖值。这让我感到困惑。
样本输出:
认为:
NEW_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
请对此提出任何建议。