GNU中的递归通配符使?

自从我使用了一段时间以来make,请忍受...


我有一个目录flac,其中包含.FLAC文件。我有一个对应的目录,mp3其中包含MP3文件。如果FLAC文件比相应的MP3文件新(或相应的MP3文件不存在),那么我想运行一堆命令将FLAC文件转换为MP3文件,并在其中复制标签。


缺点:我需要flac递归搜索目录,并在mp3目录中创建相应的子目录。目录和文件的名称中可以有空格,并以UTF-8命名。


我想用它make来驱动。


红颜莎娜
浏览 457回答 3
3回答

largeQ

我会按照这些思路尝试FLAC_FILES = $(shell find flac/ -type f -name '*.flac')MP3_FILES = $(patsubst flac/%.flac, mp3/%.mp3, $(FLAC_FILES)).PHONY: allall: $(MP3_FILES)mp3/%.mp3: flac/%.flac&nbsp; &nbsp; @mkdir -p "$(@D)"&nbsp; &nbsp; @echo convert "$<" to "$@"给make初学者的几个快速笔记:在@前面的命令在防止make从实际运行它之前打印命令。$(@D)是目标文件名($@)的目录部分确保其中带有shell命令的行以制表符开头,而不以空格开头。即使这应该处理所有UTF-8字符和填充,它也会在文件名或目录名中的空格处失败,因为make使用空格分隔Makefile中的填充,并且我不知道解决此问题的方法。恐怕只剩下一个shell脚本了:-/
打开App,查看更多内容
随时随地看视频慕课网APP