如何更改makefile中的文件后缀?

如何更改makefile中的文件后缀?

我是 Makefile 新手,只是想更改文件后缀。我想将文件从一种格式转换为另一种格式,例如 .mov 到 .mp4

在 bash 中我会做类似的事情

out1 = "${input/mov/mp4}"

(有没有办法在 Make 中使用内联 Bash 语法?)

无论如何它不起作用。所以我在文本函数上找到了这些文档 https://www.gnu.org/software/make/manual/html_node/Text-Functions.html

$(var:suffix=replacement)

所以尝试将其转化为我可以使用的东西......

out1 := "${input/mov/mp4}"   ##bash syntax doesnt work
out2 := $(input:suffix=mp4)

check:
    @echo " input: ${input}"
    @echo "  out1: ${out1}"
    @echo "  out2: ${out2}"

但这不起作用,后缀未受影响

$ input=tutorial-v1.mov make check
 input: tutorial-v1.mov
  out1:
  out2: tutorial-v1.mov

我见过其他使用 sed 的脚本,但只是为了更改后缀,我只需要正确使用咒语语法即可。

第二个问题,我不认为有比定义命名环境变量更好的方法将参数传递给 makefile 脚本。例如,make cmd param1 param2就像任何其他 shell 脚本一样$1

答案1

我的建议是将PARAM1PARAM2作为参数,然后在您的目标中使用它们:

check:
    @echo "  input: ${INPUT}"
    @echo " param1: ${PARAM1}"
    @echo " param2: ${PARAM2}"
    @echo "    out: $(INPUT:$(PARAM1)=$(PARAM2))"

下面是它的用法示例:

INPUT=file.mkv PARAM1=.mkv PARAM2=.avi make check
  input: file.mkv
 param1: .mkv
 param2: .avi
    out: file.avi

另一种选择使用文件名函数

check:
    @echo " input: ${INPUT}"
    @echo "suffix: ${SUFFIX}"
    @echo "   out: $(addsuffix $(SUFFIX), $(basename $(INPUT)))"

像这样测试它:INPUT=file.avi SUFFIX=.mp4 make check,它应该产生以下结果:

 input: file.avi
suffix: .mp4
   out: file.mp4

答案2

out1 = $(patsubst %.mov,%.mp4,$(input))

注意:像 makefile 中的大多数内容一样,如果文件名中有空格,它就不起作用。

如果输入是空格分隔的文件名列表,则输出也是如此。每个文件名都是单独转换的。

相关内容