我试图为我的makefile制定这个发布规则--它的工作是复制文件夹中的目录,除了一些(比如目的地等)--我看过makefile filter函数,但是它似乎在bash循环中不能工作吗?有没有一种简单的方法可以过滤掉bash列表中的项目?
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;
发布于 2016-09-22 16:05:08
滤出函数是一个Make函数,所以如果要使用它,必须在将命令传递给shell之前使用它。
您可以在规则之外使用它:
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
或在规则内:
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中筛选列表:
IGNORE = builds cfg compiled
release:
@for folder in *; do \
if [ -d $$folder ]; then \
[[ "$(IGNORE)" =~ $$folder ]] || echo $$folder; \
fi; \
done
https://stackoverflow.com/questions/39641219
复制相似问题