makefile - 包含生成的 makefile 没有警告消息

标签 makefile gnu-make

对于我的一个项目,我会自动生成 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-忽略错误对我不起作用。我想要类似于 bash 将 stderr 管道传递到/dev/null 的惯例,例如 some_cmd 2>/dev/null但为了包含在 make 中。

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

这样的事情有可能吗,还是我只需要处理烦人的警告消息?

最佳答案

我自己多次遇到并(重新重新重新重新)解决了这个问题。实际上,问题在于生成和使用依赖文件时的思维方式。

这个链接有“分辨率”的详细说明:http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/

基本上归结为依赖文件实际上只需要重建,而不是库/可执行文件的初始构建。因此,您不需要预先制定生成依赖文件的规则(实际上效率较低),您应该在目标文件步骤期间将它们生成为标记为宝贵的中间文件(因此它们被创建和跟踪为侧面- 不应自动清理的效果文件)。随后的构建将提供可用的文件,这正是您想要实现的整体目标。然后,您可以将其设置为依赖文件上的“-include”,并预先知道如果依赖文件生成失败,您的目标文件构建步骤将失败,并立即给出错误,正如您所提到的,这是首选,而不是一个晦涩的和间接的很久以后。

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

关于makefile - 包含生成的 makefile 没有警告消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771737/

相关文章:

android - cmake中生成asm文件后调用shell命令

makefile - 将先决条件扩展推迟到(不同的)目标创建之后

android - 如何设置 GNUMAKE 变量以使 ndk-build 正常工作

c - 我不知道这个 makefile 有什么问题?

c - 使用MAKEFILE在编译前复制文件并在编译后删除它们

makefile - GNU Make 中的仅限订单目标 - 对于 Microsoft NMAKE?

c - 如何在 Linux 上为 gcc 制作一个简单的 makefile

c++ - 使用静态库编译时出现链接器错误

c++ - G++编译,mac os和ubuntu的区别

基于当前目标的 Makefile 依赖目标