首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Makefile列表筛选出目录

使用Makefile列表筛选出目录
EN

Stack Overflow用户
提问于 2016-09-22 14:00:53
回答 1查看 2.8K关注 0票数 1

我试图为我的makefile制定这个发布规则--它的工作是复制文件夹中的目录,除了一些(比如目的地等)--我看过makefile filter函数,但是它似乎在bash循环中不能工作吗?有没有一种简单的方法可以过滤掉bash列表中的项目?

代码语言:javascript
代码运行次数:0
运行
复制
SOURCE_DIR=builds/$(NAME)_$(VERSION)

#List of items to ignore
IGNORE=builds cfg compiled

release:
if [ -d "cfg" ]; then \
    cp -r cfg $(SOURCE_DIR)/cfg; \
fi;
for folder in *; do \
    if [ -d "$$folder" ]; then \
            if [[ $(IGNORE) != $$folder ]]; then \
                cp -r $$folder $(SOURCE_DIR)/addons/; \
            fi; \
    fi; \
done;
EN

回答 1

Stack Overflow用户

发布于 2016-09-23 00:05:08

滤出函数是一个Make函数,所以如果要使用它,必须在将命令传递给shell之前使用它。

您可以在规则之外使用它:

代码语言:javascript
代码运行次数:0
运行
复制
THINGS := $(wildcard *)
IGNORE = builds cfg compiled
THINGS := $(filter-out $(IGNORE), $(THINGS))

release:
    @for folder in $(THINGS); do \
      if [ -d $$folder ]; then \
        echo $$folder; \
      fi; \
     done

或在规则内:

代码语言:javascript
代码运行次数:0
运行
复制
THINGS := $(wildcard *)
IGNORE = builds cfg compiled

release:
    @for folder in $(filter-out $(IGNORE), $(THINGS)); do \
      if [ -d $$folder ]; then \
        echo $$folder; \
      fi; \
     done

或者您可以继续使用for folder in *...并在bash中筛选列表:

代码语言:javascript
代码运行次数:0
运行
复制
IGNORE = builds cfg compiled

release:
    @for folder in *; do \
      if [ -d $$folder ]; then \
        [[ "$(IGNORE)" =~ $$folder ]] || echo $$folder; \
      fi; \
     done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39641219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档