【发布时间】:2011-07-01 17:27:11
【问题描述】:
使用 autoconf/automake 构建系统时,如果 Makefile.am(甚至更高级别,如 configure.ac)中的编译器标志或其他变量发生更改,与该 Makefile 关联的 C++ 源文件将不会自动重新构建。这变得尤为重要,因为我们将 automake 用作仅根据需要重新编译的持续构建系统的一部分。
我的想法是包含 Makefile 作为 .o 文件的依赖项,理论上可以解决上述问题。所以有几个问题:
首先,是否可以添加这样的规则?我宁愿不必将自定义规则添加到每个 Makefile.am,因此可以放入顶级文件(如 configure.ac)的东西会很棒。
其次,这种方法的缺点是在某些情况下,对 Makefile 的更改实际上并不会影响编译,因此我最终会在不需要时重新构建。我想我愿意忍受这个(或者至少尝试一下看看它有多痛苦),以便更好地保证我的构建是正确的,但是有没有更好的方法来解决这个问题?我相信 clearmake 通过保存实际的编译器命令(以及其他依赖项)然后将当前命令与之前的命令进行比较以确定是否需要重新生成文件来解决这个问题。
【问题讨论】:
-
根据更改的 makefile 变量重新构建东西是错误的,因为它会破坏像
make install prefix=/some/other/prefix这样的东西,这对于像 GNU stow 这样的工具来说是必需的。 -
@JackKelly 我可以看到这通常是一件坏事,但对于像 AM_CPPFLAGS 这样的特定标志的更改似乎需要重建。例如,如果我从包含
.../somelib-v2更改为.../somelib-v3,则肯定需要重新编译代码。如果我能获得实际的 Makefile* 更改以强制重新编译,我愿意放弃命令行变量设置。