Automake: зависимость от результата сборки - PullRequest
2 голосов
/ 29 января 2011

Я использую automake и autoconf.

В подкаталоге src / Makefile.am содержится

bin_PROGRAMS = hello
hello_SOURCES = hello.c

После сборки привет, я хочу запустить инструмент (некоторый анализатор / оптимизатор, установленный в системе) в двоичном файле, чтобы изменить его (например, полосу) или сгенерировать статистику (например, дварфы, pahole ...). Для этого Makefile.am в каталоге верхнего уровня содержит

tool:
         tool src/hello

При сборке с make и выполнении make tool все в порядке. Проблема возникает, когда пользователь запускает make tool без сборки двоичного файла. Как я могу заставить сборку bin_PROGRAMS (которая может быть списком) или просто двоичный файл приветствия как зависимость целевого инструмента?

Ни

tool: bin_PROGRAMS
         tool src/hello

ни

tool: src/hello
         tool src/hello

работа.

Ответы [ 2 ]

1 голос
/ 30 января 2011

Вы хотите:

tool: $(bin_PROGRAMS)

Но у вас возникнет та же проблема, что и при явном указании src / hello.(А именно, Makefile верхнего уровня не знает, как создать привет в src.) Вам, вероятно, было бы лучше сделать что-то вроде:

tool:
        cd src && $(MAKE) $(AM_MAKEFLAGS) tool

на верхнем уровне и поместить фактическое правило в src./Makefile.am, где вы можете перечислить зависимости.Но это тоже довольно плохая идея.Вероятно, лучшее, что можно сделать, это использовать локальное правило и поместить что-то вроде:

all-local:
        tool hello

в src / Makefile.am.Это будет гарантировать, что инструмент запускается всякий раз, когда вы запускаете make без аргументов, но он не будет обновлять вывод при восстановлении hello.Если это приемлемо, то это разумное решение.Другой вариант - сделать:

tool-output: hello
        tool hello

в src / Makefile.am и перечислить вывод инструмента в noinst_DATA в src / Makefile.am.

1 голос
/ 29 января 2011

Целевой файл Makefile с именем 'tool' должен создать файл с именем 'tool'.Поскольку «инструмент» уже существует, Make предполагает, что ему не нужно снова запускать команду (я упрощаю, но немного).

Конструкция, подобная этой, должна работать:

tool_output: tool src/hello
    tool src/hello > tool_output

Кроме того, в общем, я считаю, что вы не можете использовать bin_PROGRAMS или любую другую переменную Automake (назначенную с =) в качестве зависимости , но я могу ошибаться.

...