3

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

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

首先,是否可以添加这样的规则?我宁愿不必将自定义规则添加到每个 Makefile.am,因此可以放入顶级文件(如 configure.ac)的东西会很棒。

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

4

1 回答 1

2

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

于 2011-07-01T17:38:37.683 回答