gpt4 book ai didi

makefile - GNU make 中的递归通配符?

转载 作者:行者123 更新时间:2023-12-03 05:09:37 24 4
gpt4 key购买 nike

自从我使用 make 以来已经有一段时间了,所以请耐心等待......

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

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

我想使用 make 来驱动它。

最佳答案

我会尝试一些类似的事情

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 脚本了:-/

关于makefile - GNU make 中的递归通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2483182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com