autotools: заставить make не перестраивать configure / Makefile - PullRequest
7 голосов
/ 20 апреля 2011

У меня есть проект с автоинструментами: automake, autoconf.

Я хочу запретить make переделывать файлы configure, Makefile.in и т.д .; просто сделать работу по компиляции.

Некоторые файлы редактируются вручную, и я знаю, что не должен этого делать. (Или проект был обновлен из CVS со всеми сгенерированными файлами, сохраненными в CVS). Но на данный момент у меня не установлена ​​правильная версия автоинструментов.

Какие должны быть времена модификации этих файлов (которые должны быть новее / старше):

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

Или: какую последовательность touch команд я должен выполнить для достижения своей цели?

Ответы [ 3 ]

10 голосов
/ 21 апреля 2011

Прежде всего, если вы отредактируете сгенерированный файл напрямую, он все равно не будет перестроен, потому что он тогда новее, чем его предпосылки.

Затем здесь происходит две отдельные вещи: config.status и Makefile создаются во время сборки. Трудно предотвратить их переделку во время сборки, если вы не сделаете их временные метки более новыми.

Другие файлы создаются различными автоинструментами. Последние версии Automake по умолчанию не создают правил, которые переделывают их автоматически. В зависимости от вашего пакета, вы можете использовать configure параметр --disable-maintainer-mode. Документация Automake содержит еще несколько интересных сведений об этой опции.

Одна хитрость, которую я иногда использую с пакетом, о котором я мало знаю или который имеет довольно испорченную систему сборки, - это запускать что-то вроде

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

так что если эти программы будут вызваны, будет подставлен noop.

3 голосов
/ 20 апреля 2011
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

2 голосов
/ 28 августа 2012

Попробуйте явно указать make, что эти файлы не должны быть переделаны через командную строку

$ make -o configure -o Makefile.in

или с помощью MAKEFLAGS

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

выдержка из руководства по сборке GNU

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

Если ваш шаблон автоинструментов правильно использует $(MAKE) для подкаталогов, проблем не должно быть.

...