我正在尝试使用make来处理一些数据处理。
在makefile makefile-month
output_$(YEAR)_$(MONTH): input_$(YEAR)_$(MONTH)
foo input_$(YEAR)_$(MONTH) output_$(YEAR)_$(MONTH)
此规则可用于处理任何所需的月份,例如
make -f makefile-month YEAR=2006 MONTH=2
这很好用。
我现在真正感兴趣的是使用make来并行处理几个月。 但是,我找不到实现这一目标的简单方法。
请注意,使用shell for循环不适用于并行make。 定义全局makefile,
all:
for year in 2006; do \
for month in 1 2 3 4 5 6 7 8 9 10 11 12; do \
$(MAKE) -f makefile-month YEAR=$$year MONTH=$$month; \
done; \
done
并且正在运行,
make -j 12
并不是每个月并行执行。 对sub-make的每次调用都是串行执行的。
有什么想法吗?
答案 0 :(得分:0)
有许多不同的方法来处理细节,但整体解决方案是在单个配方中远离for循环并切换到单个目标。例如:
YEARS := 2006 2007
MONTHS := 1 2 3 4 5 6 7 8 9 10 11 12
TARGETS := $(foreach Y,$(YEARS),$(foreach M,$(MONTHS),month.$Y.$M))
.PHONY: all $(TARGETS)
all: $(TARGETS)
$(TARGETS):
$(MAKE) -f makefile-month YEAR=$(word 2,$(subst ., ,$@)) MONTH=$(word 3,$(subst ., ,$@))
(注意我没有对此进行测试,但希望你能得到这个想法)。