0

作为构建过程的一部分,Make 创建了几个.tgz文件:

blah_1.tgz blah_2.tgz .... blah_n.tgz

如何rsync在每个文件上调用另一个命令(例如,)?

在 bash 中,我会:

for file in `ls *.tgz`' do rsync $file DESTINATION; done

或者:

ls | grep tgz | xargs rsync {} DESTINATION

但是熟悉的 bash 语法似乎不符合 Make。有任何想法吗?

4

1 回答 1

1

嗯......这样的事情应该可以工作:

TGZ_FILES := blah_1.tgz blah_2.tgz .... blah_n.tgz
RSYNC_TARGETS := $(TGZ_FILES:%=rsync-%)

all : $(RSYNC_TARGETS)

.PHONY : $(RSYNC_TARGETS)
$(RSYNC_TARGETS) : rsync-% : %
    rsync $* DESTINATION

# Omit the following rule
# if .tgz files are made somewhere else (outside Make),
# and you assume they are always up-to-date
$(TGZ_FILES) : %.tgz : ...
    # rule to make each .tgz file

此示例使用 GNU Make 的以下功能:

于 2012-05-30T11:34:00.293 回答