Использование automake для копирования файла как части цели по умолчанию - PullRequest
2 голосов
/ 29 марта 2019

Я работаю над проектом, созданным с помощью GNU Autotools.Как часть сборки, которая выполняется по умолчанию, когда пользователь запускает ./configure && make, я хочу, чтобы он скопировал файл config/foo.conf.orig в config/foo.conf, создав пример конфигурации, которую пользователь может редактировать.

Что делатьЯ вставил файл Makefile.am, чтобы это произошло?

Я пробовал:

EXTRA_PROGRAMS = localconf
localconf_SOURCES = conf/foo.conf.orig
.PHONY: localconf
localconf:
    echo Creating local configuration...
    cp conf/foo.conf/orig conf/foo.conf

Но это не имеет никакого эффекта.

Работа ./configure && make localconf работает,Но я не хочу, чтобы пользователь знал, что ему нужно вызвать специальную цель;Я хочу, чтобы это произошло как часть по умолчанию ./configure && make.

1 Ответ

5 голосов
/ 29 марта 2019

Наименование программы в EXTRA_PROGRAMS не приводит к ее включению в сборку.Эта переменная может рассматриваться как объявление программ, которые могут быть включены в сборку, но не указаны явно ни в одной другой переменной *_PROGRAMS.На самом деле создание их обычно включает configure замен.Это помогает удовлетворить потребности Automake в статических знаниях всех целей.

Если файл, который будет создан, будет установлен вместе с программным обеспечением (возможно, после пользовательской модификации), то нужно просто назвать егокак обычная цель, и предоставьте для нее правило сборки.Возможно, что-то вроде этого:

sysconf_DATA = config/foo.conf
EXTRA_SOURCES = config/foo.conf.orig
CLEANFILES = config/foo.conf

config/foo.conf: config/foo.conf.orig
    cp -p $< $@

Включение файла .orig в число EXTRA_SOURCES гарантирует, что он будет включен, когда вы make dist, а я думаю, вам нужно явно указать имявстроенный файл в CLEANFILES, если вы хотите, чтобы на него влияли make clean.

Если по какой-то причине это не соответствует вашим потребностям , то в Automake есть несколько довольно общие положения для прикрепления ваших собственных правил сборки .Используя их, вы можете сделать так, чтобы ваш файл создавался следующим образом:

EXTRA_SOURCES = config/foo.conf.orig

all-local: config/foo.conf

config/foo.conf: config/foo.conf.orig
    cp -p $< $@

Вы также можете использовать некоторые или все install-data-local, uninstall-local и либо clean-local, либо distclean-local..


Кроме того, обратите внимание

  • Определение зависимости для встроенного файла конфигурации, обеспечивающее повторное копирование файла при изменении файла модели.
  • Использование $< в правиле сборки для ссылки на файл конфигурации модели.Это помогает поддерживать сборки из исходного кода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...