Makefile处理具有相同扩展名的文件

马特·D。

这似乎与如何在目标文件和源文件具有相同扩展名的地方编写Makefile有关在该问题中,扩展名相同,但是输入和输出文件似乎在同一目录中,并且文件名有条件地重命名。

我有大量.txt文件../src/需要处理,然后作为同名txt文件转储到./(称为目录target/)中。我要使用make,以便只../src/更新其中已更改的文件./在放入真实代码之前,我希望使原型能够正常工作。

Makefile./情况如下:

DIR = ../src
INPUTS = $(wildcard $(DIR)/*.txt)
OUTPUTS = $(patsubst $(DIR)/%.txt,%.txt,$(INPUTS))

all: $(OUTPUTS)

.PHONY: $(INPUTS)

check:
    @echo "DIR = $(DIR)"
    @echo "INPUTS = $(INPUTS)"
    @echo "OUTPUTS = $(OUTPUTS)"

%.txt: $(DIR)/%.txt
    sed -e "s/test/cat/g" "$<" > $@

目前,../src/aretest1.txt的内容test2.txt如Makefile所示,运行make test2.txt将按预期生成文件。

target/ $ make test2.txt
sed -e "s/test/cat/g" "../src/test2.txt" > test2.txt

正在运行会make check显示INPUTSOUTPUTS

target/ $ make check
DIR = ../src
INPUTS = ../src/test1.txt ../src/test2.txt
OUTPUTS = test1.txt test2.txt

如果我运行make all,它将每次生成每个文件。这是预期与.PHONY $(INPUTS)那里线。

如果我删除.PHONY $(INPUTS)目标,Make将束缚自己,试图找到要建立的目标,../src/test1.txt$(DIR)在其前面保留前缀,直到它使文件名过长并放弃为止。

make: stat: ../src/../src/../src/ [repeat for a few pages] ../src/../src/test1.txt: File name too long
make: stat: ../src/../src/../src/ [repeat for a few pages] ../src/../src/../src/test1.txt: File name too long
make: *** No rule to make target `../src/../src/../src/[repeat]../src/../src/test1.txt', needed by `../src/[repeat]../src/../src/test1.txt'.  Stop.

它永远不会进行处理test2.txt


正如我草拟这一点,我有想法,除去../从DIR,并重新定位的Makefile所以这是父母双方src/target/这种方法似乎可行,但并不理想。最终将有这些Makefile链,每个Makefile从一个目录拉到另一个目录。

有没有一种方法可以将Makefile'target /'与生成的目标文件保持在一起,并以相对路径中的某些目标文件为基础?

马克西姆·埃格鲁什金

代替

%.txt: $(DIR)/%.txt

和:

${CURDIR}/%.txt: $(DIR)/%.txt

这种方式%.txt.txt任何目录中的任何文件都不匹配换句话说,您将此规则的范围限制为${CURDIR}/仅包含文件,这样可以防止无限递归。

有关更多详细信息,请参见§10.5.4模式如何匹配

避免相对路径也是一种好的做法:

DIR = $(abspath ../src)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Webpack 2+:如何对具有相同扩展名的文件应用不同的加载器?

尝试获取所有具有相同扩展名的文件后,活动被卡住了

如何使用Python检查具有相同扩展名的同名文件

使用批处理文件以相同的扩展名顺序重命名所有文件

从目录中读取具有Python中相同文件扩展名的多个文件的文件

具有相同扩展名的Golang分组文件

如何在目录中查找所有具有相同扩展名的文件

如何检测具有相同名称但扩展名不同的文件?

是否可以打开多个具有相同扩展名的文件,而无需通过cmd键入扩展名?

从相同扩展名但不具有扩展名(MATLAB)的目录中获取文件名

在ruby中一次移动所有具有相同扩展名的文件

从文档目录中获取包含相同名称但具有不同扩展名的文件列表。

使用基本名称删除文件扩展名并搜索具有相同名称的文件

批量打开Windows子文件夹中具有相同扩展名的文件

重命名具有相同扩展名和任何名称的所有文件

如何在目录中并行查找所有具有相同扩展名的文件

压缩具有相同名称但扩展名不同的多个文件

如何使用rm一次性删除具有相同扩展名的文件?

如何删除所有具有相同扩展名“ .TMP”的文件?

亚行提取具有相同扩展名的多个文件

Labview:删除具有相同扩展名的文件

创建一个批处理文件以合并两个具有“相似名称”和相同扩展名的文件[Windows]

查找具有相同名称但扩展名不同的文件并删除最早的文件

删除具有相同扩展名的批量文件,同时保留具有相同扩展名的文件

批处理:保存具有相同扩展名但在另一个目录中的多个文件

列出用户指定的具有相同扩展名的所有文件

Makefile:对变量中具有特定扩展名的文件进行操作

移动子文件夹中具有相同扩展名的所有文件

bash:删除许多具有相同扩展名的文件