我正在使用 bash 并尝试使用 makefile 将 .ppt 目录中的所有文件复制到 .pdf,然后将它们全部添加到存档中。这是我目前所拥有的
.PHONY: all clean
files = $(wildcard *.ppt)
OBJ = $(patsubst %.pdf, %.ppt, $(wildcard *.ppt))
clean:
rm -f lectures.tar.gz *.pdf
到目前为止,我编写的唯一 makefile 已用于从 1 或 2 个源文件编译程序。不确定如何解决这个问题
最佳答案
make 的诀窍在于它从结尾开始,从您要创建的内容开始,然后向后返回到开头,看看发生了什么变化。
那么,最后是什么:您想生产什么?根据您的示例,我们将推断您想要创建一个名为 lectures.tar.gz
的压缩 tar 文件。 .因此,我们需要一个目标:
lectures.tar.gz:
tar 文件中包含什么? PDF 文件,您已经了解如何将其计算为 OBJ
变量,所以这些东西必须列为 lectures.tar.gz
的先决条件:
lectures.tar.gz: $(OBJ)
该目标的配方是什么?它应该创建一个具有该名称的 tar 文件,其中包含所有文件。一种方法是这样的:
lectures.tar.gz: $(OBJ)
tar czf lectures.tar.gz $(OBJ)
另一种方式,使用 automatic variables 更通用, 将是:
lectures.tar.gz: $(OBJ)
tar czf $@ $^
现在,您如何创建 OBJ
文件?对于每一个,您都需要从 .ppt
中复制它版本。由于您使用的是 GNU make(正如您使用 wildcard
等函数所证明的那样),您可以使用 pattern rule为了这;模式是这样的:
%.pdf : %.ppt
cp $< $@
这个模式告诉 make 如何构建一个文件 X.pdf
来自任何文件 X.ppt
, 与 cp
命令:在本例中为自动变量 $<
和 $@
是必需的,因为你不知道名字。这是一个隐式规则,因为名称没有明确列出,但由模式暗示。
现在如何构建 .ppt
文件?你不需要,因为它们是源文件,所以你完成了!
关于bash - 如何使用 makefile 更改所有文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38622016/