尝试在Makefile目标中实现循环 [英] Trying to implement a loop in Makefile target
本文介绍了尝试在Makefile目标中实现循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的目标,我想在其中为list变量中的每个元素运行一个循环。
问题是循环运行,但test
变量值被作为空
list = mlflow emr
common=$(someDir)/common
.PHONY:build
build:
for var in $(list); do
cd ${common};
test=$(git diff --name-only --diff-filter=AM master | grep ^$(var)/);
if [ "$(test)" != "" ]; then
echo "condition met";
else
echo "It is Not Setup";
fi
done
错误:
bash-5.0# sudo make build n=1
for var in mlflow emr; do
cd /mak/epa-toolchain/common;
test=;
if [ "" != "" ]; then
echo "condition met";
else
echo "It is Not Setup";
fi
done
It is Not Setup
It is Not Setup
推荐答案
$
是一个要创建的特殊字符:它引入了一个Make变量引用。因此:
$(git diff --name-only --diff-filter=AM master | grep ^$(var)/)
不是一个外壳$(...)
命令,它是一个名称非常奇怪的make变量。无论您希望外壳看到$
什么地方,都必须将其转义为$$
:
$$(git diff --name-only --diff-filter=AM master | grep ^$$var/)
(请注意,您必须将$(var)
更改为$$var
,因为前者是对make变量var
的引用,但您在设置外壳变量var
的外壳中循环)。
同上:
if [ "$(test)" != "" ]; then
必须为:
if [ "$$test" != "" ]; then
因为test
是您刚刚赋值的外壳变量,而不是make变量。
这篇关于尝试在Makefile目标中实现循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文