gpt4 book ai didi

makefile - GNU Makefile 规则从单个源文件生成一些目标

转载 作者:行者123 更新时间:2023-12-03 04:54:12 27 4
gpt4 key购买 nike

我正在尝试执行以下操作。有一个名为 foo-bin 的程序,它接受单个输入文件并生成两个输出文件。一个愚蠢的 Makefile 规则是:

file-a.out file-b.out: input.in
foo-bin input.in file-a.out file-b.out

但是,这并不以任何方式告诉 make 这两个目标将同时生成。在串行运行 make 时这很好,但如果尝试 make -j16 或同样疯狂的东西,可能会导致麻烦。

问题是是否存在一种方法来为这种情况编写正确的 Makefile 规则?显然,它会生成一个 DAG,但不知何故,GNU make 手册没有指定这种情况如何发生予以处理。

运行相同的代码两次并仅生成一个结果是不可能的,因为计算需要时间(想想:几个小时)。仅输出一个文件也会相当困难,因为它经常被用作 GNUPLOT 的输入,而 GNUPLOT 不知道如何仅处理数据文件的一小部分。

最佳答案

诀窍是使用具有多个目标的模式规则。在这种情况下,make 将假定两个目标都是通过命令的单次调用创建的。

all: file-a.out file-b.outfile-a%out file-b%out: input.in    foo-bin input.in file-a$*out file-b$*out

模式规则和普通规则之间的这种解释差异并不完全有意义,但它对于这样的情况很有用,并且它记录在手册中。

此技巧可用于任意数量的输出文件,只要它们的名称具有一些公共(public)子字符串供 % 匹配即可。 (在本例中,公共(public)子字符串是“.”)

关于makefile - GNU Makefile 规则从单个源文件生成一些目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973445/

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