为多个文件创建一个Makefile规则

时间:2020-03-04 13:03:03

标签: makefile gnu-make

我只想创建一个Makefile规则,而不是为相同类型的不同文件创建相同的规则。

考虑这个小示例,其中files声明了两个Python笔记本,并且每个笔记本都应转换为Python脚本(.py)。这可以通过命令jupyter nbconvert --to script FILE完成。我尝试创建的Makefile如下所示,但正常工作:

files = A.ipynb B.ipynb

all: convert

convert: $(files)   
     jupyter nbconvert --to script $<      # How to define $< as the changed file?

现在,只要更改A.ipynb,我都希望使用该命令

jupyter nbconvert --to script A.ipynb

要执行。是否可以在上述“建议”的一个简单规则内完成?我可以编写一个Makefile来完成任务,但它会更长,并且会随着files的大小而缩放:

all: A.py B.py

A.py: A.ipynb
    jupyter nbconvert --to script $<

B.py: B.ipynb
    jupyter nbconvert --to script $<

1 个答案:

答案 0 :(得分:1)

这是pattern rules的作用:

all: A.py B.py

%.py: %.ipynb
        jupyter nbconvert --to script $<

您还可以使用static pattern rules,有些人更喜欢。