如果Makefile发生更改,则自动生成重新生成源文件

Automake rebuild source file if Makefile changes

本文关键字:自动生成 新生 源文件 Makefile 如果      更新时间:2023-10-16

使用autoconf/automake构建系统时,如果Makefile.am(甚至更高级别,如configure.ac(中的编译器标志或其他变量发生更改,则与该Makefile关联的C++源文件将不会自动重建。这一点变得尤为重要,因为我们使用automake作为连续构建系统的一部分,该系统只在需要时重新编译。

我的想法是将Makefile作为.o文件的依赖项,这将在理论上解决上述问题。所以有几个问题:

首先,有可能添加这样的规则吗?我不想把这个自定义规则添加到每个Makefile.am中,所以可以放在顶级文件中的东西(比如configure.ac(会很棒。

其次,这种方法的缺点是,在某些情况下,对Makefile的更改实际上并没有影响编译,所以我最终会在不需要的时候进行重建。我想我愿意接受这一点(或者至少试着看看它有多痛苦(,以更好地保证我的构建是正确的,但有更好的方法来解决这个问题吗?我相信clearmake通过保存实际的编译器命令(以及其他依赖项(来解决这个问题,然后将当前命令与以前的命令进行比较,以确定是否需要重新生成文件。

如果使用ccache(./configure CXX='ccache g++',或者只是将ccache的g++添加到路径中(,虚假重建应该非常便宜并且仍然安全。还要确保永远不要使用AM_MAINTAINER_MODE autoconf宏,这使得依赖项跟踪是可选的(以--enable maintainer模式标志为条件(。