Bash 如何使用makefile更改所有文件扩展名
我正在使用bash,并尝试使用makefile将目录中的所有文件以.ppt格式复制到.pdf格式,然后将它们全部添加到存档中。这就是我目前所拥有的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个源文件编译程
.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