当使用autoconf / automake构建系统时,如果Makefile.am(甚至更高级别的configure.ac)中的编译器标志或其他变量发生更改,则与该Makefile关联的C ++源文件将不会自动重建。这一点变得尤为重要,因为我们将automake用作连续构建系统的一部分,该系统仅根据需要重新编译。
我的想法是将Makefile作为.o文件的依赖项,理论上可以解决上述问题。所以有几个问题:
首先,是否可以添加这样的规则?我宁愿不必将自定义规则添加到每个Makefile.am中,因此可以放入顶级文件(如configure.ac)的内容会很棒。
其次,这种方法的缺点是,在某些情况下,对Makefile的更改实际上并没有影响编译,所以当真正需要时,我将最终重建。我想我愿意忍受这个(或者至少尝试看看它有多痛苦)来更好地保证我的构建是正确的,但有没有更好的方法来解决这个问题?我相信clearmake通过保存实际的编译器命令(以及其他依赖项)然后将当前命令与之前的命令进行比较来确定是否需要重新生成文件来解决这个问题。
答案 0 :(得分:2)
如果您使用ccache(./configure CXX='ccache g++'
,或者只是将ccache的g ++添加到路径中),那么虚假重建应该非常便宜且仍然安全。另外,请确保永远不要使用AM_MAINTAINER_MODE
autoconf宏,这使得依赖关系跟踪可选(以--enable-maintainer-mode标志为条件)。