我在目录中有几个.yml文件,这些文件是创建.json文件的python脚本的输入,.json位于与不带扩展名的源相同名称的子目录中。
Makefile与一个目标一起使用,但不适用于多个目标,它会创建循环依赖项
sources = DOC-A1 DOC-A2
pyscript=~/Documents/Programmation/myscript.py
all: $(sources)/$(sources)-ref.json $(sources)/$(sources)-enr.json
$(sources)/$(sources)-ref.json: $(sources).yml
python3 $(pyscript) --ref --graph $<
$(sources)/$(sources)-enr.json: $(sources).yml
python3 $(pyscript) --enr --graph $<
假设您具有源文件:DOC-A1.yml DOC-A2.yml,那么您需要执行以下操作:
# Source file base list (without yml extensions)
sources = DOC-A1 DOC-A2
# Create a list of ref output files from the base names
outputs_ref = $(addsuffix -ref.json,$(sources))
# Do the same with the enr files
outputs_enr = $(addsuffix -enr.json,$(sources))
# Print the list of output files you want (for ref)
$(info outputs_ref: $(outputs_ref))
$(info outputs_enr: $(outputs_enr))
pyscript=~/Documents/Programmation/myscript.py
# All now depends on the two lists of output files
all: $(outputs_ref) $(outputs_enr)
# Pattern-rule to generate -ref.json files, dependant on a .yml file with the same base-name
%-ref.json : %.yml
@echo python3 $(pyscript) --ref --graph $<
# Pattern-rule to generate -enr.json files, dependant on a .yml file with the same base-name
%-enr.json: %.yml
@echo python3 $(pyscript) --enr --graph $<
[注意:我仅使用的规则打印出命令-运行,从行首删除@echo
部分
更新我忘记提及模式规则了。规则:%.a : %.b
将扩展为与%.a
匹配的所有目标,其中%
是通配符。必须具有匹配的%.b
依赖性,其中%
也是通配符。因此,如果您具有源文件1.b, 2.b, 3.b
,并且想要将其编译为1.a, 2.a, 3.a
,则模式规则%.a : %.b
将为您执行此操作。