autotools:强制 make 不重建配置/Makefile

Posted

技术标签:

【中文标题】autotools:强制 make 不重建配置/Makefile【英文标题】:autotools: force make not to rebuild configure/Makefile 【发布时间】:2011-08-09 12:23:45 【问题描述】:

我有一个带有 autotools 的项目:automake、autoconf。

我要禁止make重新制作文件configureMakefile.in等;只是为了做编译工作。

有些文件是手工编辑的,我知道我不应该这样做。 (或者项目是从 CVS 更新的,所有生成的文件都存储在 CVS 中)。 但目前我没有安装正确版本的 autotools。

这个文件的修改时间必须是多少(必须是新的/旧的):

aclocal.m4
configure.in
confdb/ax_prefix_config_h.m4
Makefile.am
Makefile.in
Makefile
configure
config.status

或者:我必须执行哪些touch 命令序列才能实现我的目标?

【问题讨论】:

【参考方案1】:

尝试通过命令行明确告诉make那些文件不应该被重新制作

$ make -o configure -o Makefile.in

或使用MAKEFLAGS

$ MAKEFLAGS="-o configure -o Makefile.in" make

GNU make 手册中的excerpt

‘-o file’
‘--old-file=file’
‘--assume-old=file’
Do not remake the file file even if it is older than its prerequisites, and do not remake
anything on account of changes in file. Essentially the file is treated as very old and
its rules are ignored. See Avoiding Recompilation of Some Files.

如果您的 autotools 模板正确使用 $(MAKE) 作为子目录,则应该没有问题。

【讨论】:

【参考方案2】:
touch confdb/*.m4
touch configure.in
touch *.m4
touch *.am
touch Makefile.in */Makefile.in
touch *config.h.in */*config.h.in
touch configure
touch config.status
touch config.h
touch Makefile

此处描述了 automake 和 cvs 的问题http://www.gnu.org/s/hello/manual/automake/CVS.html

【讨论】:

记得接受你自己的答案,这样问题看起来就没有答案了。【参考方案3】:

首先,如果你直接编辑一个生成的文件,它无论如何都不会被重建,因为它比它的先决条件更新。

然后,这里发生了两件事:config.statusMakefile 在构建期间创建。除非您更新它们的时间戳,否则很难防止它们在构建期间被重新制作。

其他文件由各种自动工具生成。 Automake 的最新版本默认情况下不会创建自动重新制作它们的规则。根据您的软件包,您可能希望使用configure 选项--disable-maintainer-mode。 Automake 文档包含有关该选项的一些更有趣的信息。

我有时对我不太了解或构建系统非常混乱的包使用的一个技巧是运行类似

make all AUTOCONF=: AUTOHEADER=: AUTOMAKE=: ACLOCAL=:

这样,如果这些程序碰巧被调用,noop 将被替换。

【讨论】:

我手动编辑了configure,还编辑了configure.in。但是我没有需要的自动工具版本,所以configure 的编辑就像是用正确的工具重新生成的一样。我不想使用不同的自动工具,因为该项目在 cvs 下,并且存储了所有创建的脚本(配置、*.m4、*.in)。 哦,--disable-maintainer-mode - 谢谢。不幸的是,该项目使用的不是automake,而是simplemake(Makefile.sm),它没有--disable-maintainer-mode 新版本的项目里面有几个“configure”脚本。顶部配置有--disable-maintainer-mode 并且可以正常工作,但一些内部configures 没有--disable-maintainer-mode

以上是关于autotools:强制 make 不重建配置/Makefile的主要内容,如果未能解决你的问题,请参考以下文章

autotools -- make[1]: *** 没有将目标设为“全部”的规则。停止

makefile autotools

重新排序 gnu autotools 链接器标志

make的命令行选项

UNIX系统中make clear ,make all是啥命令?

配置:错误:不满足包要求(...)