文件内容的 Makefile 依赖性,可能不存在

use*_*572 1 bash makefile gnu-make

我在创建依赖于其他文件内容的 Makefile 构建时遇到问题。

我知道我可以在 makefile 中编写类似的内容来动态生成先决条件:

result/nuclease.stat : $(shell cat config/nuclease.sample.list)

#bash
make result/nuclease.stat
Run Code Online (Sandbox Code Playgroud)

但问题是文件config/nuclease.sample.list可能不存在,而我有一个目标。

如果我可以在$(shell cat config/nuclease.sample.list)评估之前强制 make 要求config/ nuclease.sample.list - 问题就解决了。

我应该建立什么样的依赖?

另一件事,我想保留所有 gnu make 的优良品质:仅下载一次文件,仅处理一次等等。

请检查Makefile依赖树

Mad*_*ist 5

最直接的答案是使用构造的包含文件。在此方法中,您将包含一个定义所需依赖关系的 makefile,并提供一个生成规则,该规则生成包含所需信息的包含文件。这就是您所要做的:make 知道如何做剩下的事情。根据你的问题,它可能是这样的:

include nuclease-sample-list.mk

nuclease-sample-list.mk: config/nuclease.sample.list
        echo "result/nuclease.stat : $$(cat $<)" > $@
Run Code Online (Sandbox Code Playgroud)

这就是你所要做的。如果您使用的是旧版本的 GNU make,您可能需要使用-include而不是include避免看到警告消息。