Makefile:如何检测Makefile本身中的更改?

想象者

我知道使用递归Makefile的想法。诸如以下的后续生成文件是否会仅在对后续生成文件本身进行任何更改时被更新?

例如:

#parent makefile. no changes here. 
subsystem:
    cd subdir && $(MAKE)

如果子目录中的makefile被更改,使得以下内容不成立(例如,仅更改了gcc标志),那么将更新目标文件吗?

如果源文件或任何名为依赖项的头文件比目标文件更新,或者如果目标文件不存在,则必须重新编译。

伊坦·赖斯纳

正如所写的,使之完全运行该规则的唯一原因是因为subsystemsubdir不匹配。

如果subsystem要在该目录中创建文件或目录,则该规则将停止运行。

如果添加.PHONY: subsystem1,则该问题将得到解决,并且该规则在命令行(即上列出时始终运行make subsystem(如注释中所示,它.PHONY是GNU Make扩展。链接的部分之后的部分讨论了可移植的替代方法。尽管值得注意的是,它们并不完全相同,因为它.PHONY具有一些额外的好处和一些额外的限制。)

在这两种情况下,subsystem目标都不会关注任何内容的修改日期(因为它没有列出任何先决条件)。

要使目标依赖于对Makefile的更改,您需要像其他任何东西(例如)一样,将Makefile作为先决条件列出subsystem: subdir/Makefile将其列出.PHONY可能会更正确,也可能会更多。

不,make本身没有什么可追踪非先决条件。所以标记更改/等。不触发重建。但是,有一些方法可以使它正常工作(它们涉及将使用的标志存储在文件中,这些文件本身就是使用这些标志的目标的先决条件,等等)。关于这样做的问题和解答(尽管我没有立即准备好它们)。

但是其他工具会自动处理标志更改。我相信Electric Cloud的工具可以做到这一点。我相信CMake也一样。可能还会有其他人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何确保我的makefile检测到我的头文件和cpp文件中的更改?

来自分类Dev

c ++ makefile未检测到.h文件中的更改

来自分类Dev

Makefile:如何更改var的前缀?

来自分类Dev

CMake在makefile中更改颜色

来自分类Dev

CMake在makefile中更改颜色

来自分类Dev

如何在make中创建一个本身名为“ makefile”的目标?

来自分类Dev

GNU Makefile,检测架构

来自分类Dev

如何使Makefile中的错误静音?

来自分类Dev

更改包含的makefile中的文件路径

来自分类Dev

从Makefile跟踪分支更改

来自分类Dev

更改Makefile版本

来自分类Dev

包括要在Makefile本身中进行的参数

来自分类Dev

包括要在Makefile本身中进行的参数

来自分类Dev

如何更改我的makefile以构建到单独的文件夹中

来自分类Dev

如何在Makefile中更改python版本-编译Multicorn(PostgreSQL FDW扩展名)

来自分类Dev

操作系统检测Makefile

来自分类Dev

如何删除Makefile中的重复项?

来自分类Dev

如何在Makefile中设置pipefail

来自分类Dev

如何从Makefile中的目标列表创建规则?

来自分类Dev

如何检查Makefile中目标的存在

来自分类Dev

如何在Makefile中设置长选项

来自分类Dev

如何在makefile中设置compilingflags?

来自分类Dev

如何追加到Makefile中的变量列表?

来自分类Dev

如何在Makefile中修补多个路径?

来自分类Dev

如何使用Makefile中的shell内置函数?

来自分类Dev

在Makefile中,如何定义通配符模式?

来自分类Dev

如何检查Makefile中目标的存在

来自分类Dev

如何在Makefile中定义子例程

来自分类Dev

如何在Makefile中编写bash脚本