如何简化这些重复的制作目标?

时间:2015-08-10 14:51:10

标签: makefile gnu-make

考虑这些目标:

test/masterfiles/efl_data/efl_class_cmd_regcmp.json: \
  test/masterfiles/efl_data/efl_class_cmd_regcmp.csv
   $(CSVTOJSON) -b efl_class_cmd_regcmp < $< > $@

test/masterfiles/efl_data/efl_class_returnszero.json: \
  test/masterfiles/efl_data/efl_class_returnszero.csv
   $(CSVTOJSON) -b efl_class_returnszero < $< > $@

test/masterfiles/efl_data/efl_class_expression.json: \
  test/masterfiles/efl_data/efl_class_expression.csv
   $(CSVTOJSON) -b efl_class_expression < $< > $@

模式efl_class_ some_word 在目标,依赖关系和制作目标的配方中重复。我可以做些什么来将这些规则简化为单一规则?然后正常使用%$@@<似乎不适用。

1 个答案:

答案 0 :(得分:2)

编写模式规则:

EFL_PARTS = cmd_regcmp returnszero expression

EFL_DIR = test/masterfiles/efl_data

$(EFL_DIR)/%.json: $(EFL_DIR)/%.csv
        $(CSVTOJSON) -b $* < $< > $@

all: $(patsubst %,$(EFL_DIR)/efl_class_%.json,$(EFL_PARTS))
.PHONY: all