Bash 如何使用makefile更改所有文件扩展名

Bash 如何使用makefile更改所有文件扩展名,bash,makefile,gnu-make,file-extension,Bash,Makefile,Gnu Make,File Extension,我正在使用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个源文件编译程

我正在使用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的诀窍是,它从末尾开始,以您想要创建的内容开始,然后向后走到开头,以查看发生了什么变化

那么,最后是什么:你想生产什么?根据您的示例,我们推断您想要创建一个名为
touctions.tar.gz
的压缩tar文件。因此,我们需要一个目标:

lectures.tar.gz:
tar文件中有什么内容?PDF文件,您已经发现如何将其计算到
OBJ
变量中,因此必须将这些内容列为
touctions.tar.gz
的先决条件:

lectures.tar.gz: $(OBJ)
这个目标的秘诀是什么?它应该创建一个具有该名称的tar文件,其中包含所有文件。一种方法是:

lectures.tar.gz: $(OBJ)
        tar czf lectures.tar.gz $(OBJ)
另一种更通用的方法是:

lectures.tar.gz: $(OBJ)
        tar czf $@ $^
现在,如何创建
OBJ
文件?对于每一个,您都需要从
.ppt
版本复制它。由于您使用的是GNU make(您使用的
通配符
等函数证明了这一点),因此可以使用a来实现这一点;模式如下:

%.pdf : %.ppt
        cp $< $@
%.pdf:%.ppt
cp$<$@

此模式告诉make如何使用
cp
命令从任何文件
X.ppt
构建文件
X.pdf
:在这种情况下,自动变量
$Oh yeah,
为什么要这样做?为什么不是传统的shell脚本?祝你好运。@Sheller我已经制作了一个可以运行的shell脚本。这是家庭作业。我必须创建一个shell脚本和一个makefile,这两个脚本和makefile的功能完全相同,我不知道如何处理这个makefile