gpt4 book ai didi

makefile - 如何在 GNU make 中更改具有多个扩展名的列表中每个文件的扩展名?

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

在 GNU makefile 中,我想知道是否可以通过文件列表输入来生成具有新扩展名的文件列表输出。

在输入中,我得到这个列表:

FILES_IN=file1.doc file2.xls

我想在我的 makefile 中从 FILES_IN 变量构建这个变量:

FILES_OUT=file1.docx file2.xlsx

这可能吗?怎么办?

这非常困难,因为我必须解析文件列表,并检测每个扩展名(.doc、.xls)以将其替换为正确的扩展名。

最佳答案

替换以空格分隔的文件名列表中的扩展名是一种常见的要求,并且有为此提供的内置功能。如果您想在列表中每个名称的末尾添加 x:

FILES_OUT = $(FILES_IN:=x)

一般形式为$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)。这采用 VARIABLE 的值,并将以此后缀结尾的每个单词末尾的 OLD_SUFFIX 替换为 NEW_SUFFIX(留下不匹配的单词)不变)。 GNU make 调用此功能(每个 make 实现中都存在)substitution references .

如果您只想使用此将 .doc 更改为 .docx 并将 .xls 更改为 .xlsx功能,您需要使用中间变量。

FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)

您还可以使用稍微更通用的语法$(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX)。此功能并非 GNU make 所独有,但它不像简单的后缀更改替换那样可移植。

还有一个 GNU make 功能,可以让您在同一行上链接多个替换: patsubst function .

FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))

关于makefile - 如何在 GNU make 中更改具有多个扩展名的列表中每个文件的扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12069457/

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