包含生成的生成文件,不带警告消息

对于我的一个项目,我会自动生成makefile并包含它们,如下所示:

all:
    @echo 'SUCCESS is $(SUCCESS)'

clean:
    rm depend.mk

depend.mk:
    @echo 'Creating $@'
    @echo 'SUCCESS := 1' > $@

.PHONY: all clean

include depend.mk

这可以工作,但包含行会生成一条警告消息:

$ make
Makefile:13: depend.mk: No such file or directory
Creating depend.mk
SUCCESS is 1

我想沉默那第一条警告线,说depend.mk不存在。 我知道它不存在,因为我有一条规则来生成它,所以警告是不必要的(除非它没有规则)。 我不想忽略包含文件不存在的错误,并且没有规则,所以前缀include一个-忽略该错误对我不起作用。 我希望类似于将some_cmd 2>/dev/null的管道stderr约定为/ dev / null,类似于some_cmd 2>/dev/null但包含在make中。

上面的例子是这种情况的一个非常简单的例子。 在我的实际项目中,包含了很多自动生成的makefile(通过clang的自动依赖关系生成),这意味着make的全新运行会使用这些警告消息泛滥我的屏幕。

是否有这样的可能,或者我只需要处理恼人的警告信息?


我遇到过并且(重新重新重新)自己多次解决了这个问题。 真的,问题在于围绕什么时候生成和使用依赖文件。

这个链接有“决议”的详细描述:http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/

基本上归结为依赖文件实际上只是重建所必需的,而不是您的库/可执行文件的初始构建。 因此,您不需要事先生成依赖文件的规则(实际上效率较低),您应该在对象文件步骤中生成它们作为标记为珍贵的中间文件(以便它们被创建并跟踪为边 - 不应该自动清理的影响文件)。 随后的版本会提供可用的文件,这正是您试图实现的整体目标。 然后,您可以将它作为依赖文件的“-include”,并且预先知道如果依赖文件生成失败,则您的目标文件构建步骤将失败,并提供一个直接的错误,因为您提到的是首选,而不是一个模糊的间接的很晚。

实际上,我已经完成了一些实现此方法的相当大的构建系统,并且它工作得非常好,包括使用非GNU工具链的构建系统。 对于外部用户来说,它看起来是相同的,但内部它的执行效率更高,并且不会隐藏潜在的重要错误。


我尝试了很多(很多!)的东西,看看我是否可以阻止或重定向错误消息。 没有运气。

但是,当我试图-include (包括与前导破折号),它并没有给出一个错误,并且makecleanalldepend.mk和“默认”一切工作正常,并符合市场预期。

有没有特别的原因你不想使用-include变体? 似乎完全按照您要查找的内容执行,并且不会以任何方式更改Makefile的工作方式,只是在首次传递Makefile时不显示错误。

链接地址: http://www.djcxy.com/p/21717.html

上一篇: Include generated makefile without warning message

下一篇: Convert nested arbitrary JSON to CSV in Java