autotools: force make not to rebuild configure/Makefile

后端 未结 3 1774
不思量自难忘°
不思量自难忘° 2020-12-31 18:24

I have a project with autotools: automake, autoconf.

I want to prohibit make from remaking files configure, Makefile.in, etc;

相关标签:
3条回答
  • 2020-12-31 19:00

    Try to explicitly tell make those files should not be remade, via command-line

    $ make -o configure -o Makefile.in
    

    or by using MAKEFLAGS

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

    The excerpt from GNU make's manual

    ‘-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.
    

    If yours autotools template correctly uses $(MAKE) for subdirs, there should be no problems.

    0 讨论(0)
  • 2020-12-31 19:13
    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
    

    Problems with automake & cvs are described here http://www.gnu.org/s/hello/manual/automake/CVS.html

    0 讨论(0)
  • 2020-12-31 19:14

    First of all, if you edit a generated file directly, it wouldn't be rebuilt anyway, because it is then newer then its prerequisites.

    Then, there are two separate things going on here: config.status and Makefile are created during the build. It's hard to prevent these from being remade during the build unless you make their timestamps newer.

    The other files are generated by the various autotools. Recent versions of Automake do not create rules by default that remake them automatically. Depending on your package, you might want to use the configure option --disable-maintainer-mode. The Automake documentation contains some more interesting information about that option.

    One trick I sometimes use with a package that I don't know much about or that has a pretty messed up build system is to run something like

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

    so that if these programs happen to be called, a noop would be substituted.

    0 讨论(0)
提交回复
热议问题