自从我使用了一段时间以来make,请忍受...我有一个目录flac,其中包含.FLAC文件。我有一个对应的目录,mp3其中包含MP3文件。如果FLAC文件比相应的MP3文件新(或相应的MP3文件不存在),那么我想运行一堆命令将FLAC文件转换为MP3文件,并在其中复制标签。缺点:我需要flac递归搜索目录,并在mp3目录中创建相应的子目录。目录和文件的名称中可以有空格,并以UTF-8命名。我想用它make来驱动。
3 回答

largeQ
TA贡献2039条经验 获得超7个赞
我会按照这些思路尝试
FLAC_FILES = $(shell find flac/ -type f -name '*.flac')
MP3_FILES = $(patsubst flac/%.flac, mp3/%.mp3, $(FLAC_FILES))
.PHONY: all
all: $(MP3_FILES)
mp3/%.mp3: flac/%.flac
@mkdir -p "$(@D)"
@echo convert "$<" to "$@"
给make初学者的几个快速笔记:
在@前面的命令在防止make从实际运行它之前打印命令。
$(@D)是目标文件名($@)的目录部分
确保其中带有shell命令的行以制表符开头,而不以空格开头。
即使这应该处理所有UTF-8字符和填充,它也会在文件名或目录名中的空格处失败,因为make使用空格分隔Makefile中的填充,并且我不知道解决此问题的方法。恐怕只剩下一个shell脚本了:-/
添加回答
举报
0/150
提交
取消