【发布时间】:2021-11-11 16:51:29
【问题描述】:
我的目标是在 GNU Make 中找到一种方法来动态创建规则以构建相等块的文件集。让我试着解释一下……
假设我有一个包含我们需要构建的所有源文件的 make 变量:
SOURCE_FILES := one.c two.c three.c four.c five.c six.c
现在我希望能够动态地将文件列表分解为 N 个子列表,并为每个子列表动态生成规则。例如,如果 N = 3 我会得到
one.o two.o: one.c two.c
@command to build just the 2 files
three.o four.o: three.o four.c
@command to build just the 2 files
five.o six.o: five.c six.c
@command to build just the 2 files
如果 N = 2,我希望有以下规则:
one.o two.o three.o: one.c two.c three.c
@command to build just the 3 files
four.o five.o six.o: four.c five.c six.c
@command to build just the 2 files
我在想,一旦我将单词列表分解为子列表,我就可以使用eval 创建规则,我想我可以尝试使用wordlist 创建子列表。我可以使用words 获得源文件的总数,但我不确定如何进行除法或迭代。我正在尝试在 Make 中完成这一切,而不使用 shell 来尝试使其与 shell 无关。
这样做的全部原因是我们的专有编译器在调用每个源文件时都很昂贵。但是将所有文件作为输入调用一次需要太长时间。所以我希望找到一个可以创建多个规则的快乐媒介,这样我就可以利用-j N 选项来并行构建。
最后,我计划制定一个可以进行链接的规则:
executable.elf : one.o two.o three.o four.o five.o six.o
@command to link the object files
【问题讨论】:
-
你熟悉static pattern rules吗?我不确定他们是否会提供帮助,但总的来说它们非常有用。不过,您可能必须使用虚拟的
.stamp目标。