autotools: принудительно создавать, чтобы не перестраивать configure / Makefile

#makefile #cvs #autotools #autoconf #automake

#makefile #cvs #autotools #автоконфигурация #automake

Вопрос:

У меня есть проект с 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 команд я должен выполнить, чтобы достичь своей цели?

Ответ №1:

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

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

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

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

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

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

Комментарии:

1. Я отредактировал configure вручную, а также редактирую configure.in . Но у меня нет необходимых версий autotools, поэтому правки configure были такими, как будто они были восстановлены с помощью правильного инструмента. Я не хочу использовать разные автоинструменты, потому что проект находится в cvs и в нем хранятся все созданные скрипты (configure, *.m4, *.in).

2. Ооо, --disable-maintainer-mode — спасибо. К сожалению, в проекте используется не automake, а simplemake (Makefile.sm ), который не имеет --disable-maintainer-mode

3. В более новой версии проекта есть несколько » configure » скриптов внутри. Верхняя настройка есть, --disable-maintainer-mode и она работает, но у некоторых внутренних configure файлов ее нет --disable-maintainer-mode .

Ответ №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

Комментарии:

1. Не забудьте принять свой собственный ответ, чтобы вопрос не выглядел оставшимся без ответа.

Ответ №3:

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

 $ make -o configure -o Makefile.in
  

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

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

Выдержка из руководства GNU make

 ‘-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) для вложенных файлов, проблем возникнуть не должно.