用于调用具有多个目标的make的Makefile
我在makefile中有一个规则,用于将wav文件转换为另一种格式 生成文件:用于调用具有多个目标的make的Makefile,makefile,cygwin,gnu-make,Makefile,Cygwin,Gnu Make,我在makefile中有一个规则,用于将wav文件转换为另一种格式 生成文件: INPUTFILE?=file1.wav OUTFILE=$(INPUTFILE:.wav=.s32) wav_to_s32: @sox $(INPUTFILE) -r 16000 $(OUTFILE) 对于输入时指定的多个文件(具有多个输出),我将如何使其工作 我会在您的makefile中使用以下内容: %.s32: %.wav sox $< -r 16000 $@ 它分别从foo.wa
INPUTFILE?=file1.wav
OUTFILE=$(INPUTFILE:.wav=.s32)
wav_to_s32:
@sox $(INPUTFILE) -r 16000 $(OUTFILE)
对于输入时指定的多个文件(具有多个输出),我将如何使其工作
我会在您的makefile中使用以下内容:
%.s32: %.wav
sox $< -r 16000 $@
它分别从foo.wav
和bar.wav
生成foo.s32
和bar.wav
。
%.s32: %.wav
sox $< -r 16000 $@
它分别从foo.wav
和bar.wav
生成foo.s32
和bar.wav
。如中所述,这里的关键是模式规则。如果要自动转换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 $@
请注意,make足够智能,如果文件已被转换并且此后未更改,则不会重新转换文件。make的主要目的甚至是:跟踪文件间的依赖关系。如中所述,这里的关键是模式规则。如果要自动转换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 $@
请注意,make足够智能,如果文件已被转换并且此后未更改,则不会重新转换文件。make的主要目的甚至是:跟踪文件之间的依赖关系。要清楚的是,Cygwin对此并没有什么特别之处。下面的答案适用于任何平台上的大多数make实现。以下答案适用于任何平台上的大多数make实现。
INPUTFILE := $(wildcard *.wav)
OUTFILE := $(patsubst %.wav,%.s32,$(INPUTFILE))
.PHONY: wav_to_s32
wav_to_s32: $(OUTFILE)
%.s32: %.wav
sox $< -r 16000 $@