我有一个使用autotools的项目:automake,autoconf。
我想禁止make
重新制作文件configure
,Makefile.in
等;只是为了编译工作。
有些文件是手工编辑的,我知道我不应该这样做。 (或者项目已从CVS更新,所有生成的文件都存储在CVS中)。 但目前我没有安装正确版本的autotools。
这些文件必须修改的时间(必须更新/更旧):
aclocal.m4
configure.in
confdb/ax_prefix_config_h.m4
Makefile.am
Makefile.in
Makefile
configure
config.status
或者:我必须做什么序列的touch
命令来实现我的目标?
答案 0 :(得分:9)
首先,如果直接编辑生成的文件,则无论如何都不会重建它,因为它比它的先决条件更新。
然后,这里有两个不同的事情:config.status
和Makefile
在构建期间创建。除非你让他们的时间戳更新,否则很难防止这些在构建期间被重新制作。
其他文件由各种autotools生成。最新版本的Automake默认情况下不会创建自动重新制作的规则。您可能希望使用configure
选项--disable-maintainer-mode
,具体取决于您的套餐。 Automake文档包含有关该选项的一些更有趣的信息。
我有时会使用一个我不太了解的软件包或者有一个相当混乱的构建系统的一个技巧就是运行类似
的东西make all AUTOCONF=: AUTOHEADER=: AUTOMAKE=: ACLOCAL=:
因此,如果碰巧调用这些程序,就会替换noop。
答案 1 :(得分:3)
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& amp;的问题cvs在这里描述http://www.gnu.org/s/hello/manual/automake/CVS.html
答案 2 :(得分:2)
尝试明确告诉make
这些文件不应该通过命令行
$ make -o configure -o Makefile.in
或使用MAKEFLAGS
$ MAKEFLAGS="-o configure -o Makefile.in" make
GNU制作手册中的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)
作为子目录,那么应该没有问题。