Makefile 如何在一个生成文件中交错两个列表?

Makefile 如何在一个生成文件中交错两个列表?,makefile,Makefile,在我需要的文件中的一个地方 a、 ml a.mli b.ml b.mli c.ml c.mli等 我需要另一个地方 a、 mli b.mli c.mli等 在没有重复的情况下,我是否可以定义两个独立的等长列表(一个.ml文件和一个.mli文件),然后定义另一个列表作为两个列表的交错 事实上,由于总是有一个.ml和一个对应的.mli,我能从一个没有扩展名的文件名列表中生成所有这些吗,我相信它能满足您的需求。如果您获得了Make Standard Library的副本:您可以使用pairmap功能,

在我需要的文件中的一个地方

a、 ml a.mli b.ml b.mli c.ml c.mli等

我需要另一个地方

a、 mli b.mli c.mli等

在没有重复的情况下,我是否可以定义两个独立的等长列表(一个.ml文件和一个.mli文件),然后定义另一个列表作为两个列表的交错


事实上,由于总是有一个.ml和一个对应的.mli,我能从一个没有扩展名的文件名列表中生成所有这些吗,我相信它能满足您的需求。

如果您获得了Make Standard Library的副本:您可以使用
pairmap
功能,我相信它能满足您的需求。

有几种方法可以做到这一点。这可能是最普遍的:

LIST := a b c

MLLIST := $(addsuffix .ml,$(LIST))
MLILIST := $(addsuffix .mli,$(LIST))

both = $(1).ml $(1).mli

BOTHLIST := $(foreach x,$(LIST),$(call both,$(x)))

有几种方法可以做到这一点。这可能是最普遍的:

LIST := a b c

MLLIST := $(addsuffix .ml,$(LIST))
MLILIST := $(addsuffix .mli,$(LIST))

both = $(1).ml $(1).mli

BOTHLIST := $(foreach x,$(LIST),$(call both,$(x)))

这很好,虽然我必须写BOTHLIST=$(foreach x,$(LIST),$(调用两者,$(x)))这很好,虽然我必须写BOTHLIST=$(foreach x,$(LIST),$(调用两者,$(x)))谢谢,但我使用了更轻的建议。是的,Beta的答案非常适用于这种情况,即您想要交错的两个列表之间存在已知关系(它们具有相同的前缀)。如果你有两个没有这种关系的随机列表,那么这个解决方案就行不通了。我的回答符合问题的内容,但不符合题目。我曾考虑添加一个通用的列表交织器,但这是一个可怕的攻击,因为Make的列表操作函数中有一些明显的遗漏。(列表
1 2 3…
非常有用,但即使生成它也是一件痛苦的事。)这是一个可怕的黑客行为,因为Make的列表操作函数中有一些明显的遗漏是的,这就是为什么GMSL是一个令人难以置信的成就:-)。谢谢,但我使用了更轻的建议。是的,Beta的答案非常适用于这种情况,即您想要交错的两个列表之间存在已知关系(它们具有相同的前缀)。如果你有两个没有这种关系的随机列表,那么这个解决方案就行不通了。我的回答符合问题的内容,但不符合题目。我曾考虑添加一个通用的列表交织器,但这是一个可怕的攻击,因为Make的列表操作函数中有一些明显的遗漏。(列表
1 2 3…
非常有用,但即使生成它也很痛苦。)这是一个可怕的黑客攻击,因为Make的列表操作函数中有一些明显的遗漏是的,这就是为什么GMSL是一个令人难以置信的成就:-)。