我在makefile中有一个规则,它使用sox将wav文件转换成另一种格式。
Makefile:
INPUTFILE?=file1.wav
OUTFILE=$(INPUTFILE:.wav=.s32)
wav_to_s32:
@sox $(INPUTFILE) -r 16000 $(OUTFILE)如何为输入时指定的多个文件(具有多个输出)进行此操作?
INPUTFILE?=file1.wav file2.wav file3.wav发布于 2018-10-25 10:29:40
正如在另一个答案中所解释的,这里的关键是模式规则。如果您想要自动化您在INPUTFILE变量中列出的所有文件的所有转换,您可以完成初始版本和其他答案,如下所示:
INPUTFILE?=file1.wav file2.wav file3.wav
OUTFILE=$(INPUTFILE:.wav=.s32)
.PHONY: wav_to_s32
wav_to_s32: $(OUTFILE)
%.s32: %.wav
sox $< -r 16000 $@这告诉我们:
wav_to_s32不是真正的文件,它只是其他东西的简称(它是一个“假的”目标)。make wav_to_s32调用时,它将生成$(OUTFILE)中列出的所有文件。如果您希望make自动发现输入文件,则可以通过以下方法进一步改进所有这些:
INPUTFILE := $(wildcard *.wav)
OUTFILE := $(patsubst %.wav,%.s32,$(INPUTFILE))
.PHONY: wav_to_s32
wav_to_s32: $(OUTFILE)
%.s32: %.wav
sox $< -r 16000 $@请注意,如果文件已经转换且此后没有更改,那么make足够聪明,不需要重新转换文件。它甚至是创建的主要目的:跟踪文件间的依赖关系。
发布于 2018-10-25 09:13:31
我将在makefile中使用以下模式规则:
%.s32: %.wav
sox $< -r 16000 $@上面的规则将从.s32文件构建.wav文件。
使用makefile中的规则,您可以通过以下方式为多个目标调用make:
$ make foo.s32 bar.s32
sox foo.wav -r 16000 foo.s32
sox bar.wav -r 16000 bar.s32它分别从foo.s32和bar.wav生成foo.wav和bar.wav。
https://stackoverflow.com/questions/52985498
复制相似问题