尝试在Makefile目标中实现循环 [英] Trying to implement a loop in Makefile target

查看:22
本文介绍了尝试在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆