Makefile:读取/拆分数组

时间:2016-10-05 18:41:03

标签: makefile

假设您有以下目录结构:

# directory structure
├── GIT-REPO
│   ├── dev
│   ├── production
│   ├── mgmt

我正在Makefile中寻找一种方法来根据它所在的目录查找环境。我找到了一种方法在bash中执行以下操作:

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"                                                                    
IFS='/' read -r -a DIR_ARRAY <<< "$DIR"                                                                         
GIT_REPO=some-repo                                                                                            

for ((i=0; i < ${#DIR_ARRAY[@]}; i++)) do                                                                            
    if [ "${DIR_ARRAY[$i]}" = "$GIT_REPO" ] ; then                                                                   
        echo ${DIR_ARRAY[$i+1]}                                                                                      
    fi                                                                                                               
done

但是我很难将其翻译成Makefile。每个环境目录都有一个Makefile以及子目录。我希望能够通过查找$ GIT_REPO目录右侧目录的名称来动态查找它所处的环境。

1 个答案:

答案 0 :(得分:0)

以下是一个例子:

/home/user/git_repo/mgmt
/home/user/git_repo/prod
/home/user/git_repo/prod/application/
/home/user/git_repo/dev/
/home/user/my_source_files/git_repo/prod/application

您会看到一些相似之处,但目录的总长度不同。它们共享git_repo并且都包含environment(prod,dev,mgmt)。在上面每个目录的顶层是Makefile,我想在其中提取environment。我的bash示例比我需要它复杂得多,可以使用sed代替。这就是我现在的Makefile

GIT_REPO="my_repo"
ENV=$(shell pwd | sed "s/^.*\/$(GIT_REPO)\///" | cut -d / -f 1)

这样做的目的是查找Git存储库文本并删除存储库名称和之前的任何根目录。然后我们应用剪切并将其与&#39; /&#39;路径并抓住第一个元素。这将始终返回环境文件夹。

我有一个非常具体的用例,我希望在Makefile中动态获取环境,而不是每次都静态定义它。