2011-01-29 1 views
2

Я использую automake и autoconf.Automake: зависимость от результата сборки

В подкаталоге ЦСИ/Makefile.am содержит

bin_PROGRAMS = hello 
hello_SOURCES = hello.c 

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

tool: 
     tool src/hello 

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

Ни

tool: bin_PROGRAMS 
     tool src/hello 

ни

tool: src/hello 
     tool src/hello 

работы.

+1

Можете ли вы опубликовать make-файл целиком? – Kevin

ответ

1

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

конструкт, как это должно работать:

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

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

+0

Эта проблема - это решение '.PHONY: tool'. – ptomato

+0

Это, пожалуй, только личный стиль, но я не думаю, что '.PHONY' /' FORCE' предназначены для этого.Это защита от странного нежелательной почты в вашем каталоге сборки, а не способ обойти нормальную семантику целей makefile. – zwol

+0

Мой вопрос был о зависимости, а не о проблеме .PHONY. Я знаю, что целевой инструмент должен быть целевой .PHONY, так как он не создает выходной файл в любом случае, и некоторый файл нежелательной почты может столкнуться с его именем. Но в любом случае ему нужен двоичный файл в подкаталоге. – aquo

1

Вы хотите:

 
tool: $(bin_PROGRAMS) 

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

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

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

 
all-local: 
     tool hello 

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

 
tool-output: hello 
     tool hello 

в ИПВ/Makefile.am и список инструментов-вывода в noinst_DATA в ИПВ/Makefile.am.

+0

Благодарим вас за советы. Я думаю, что буду придерживаться первого решения и рекурсии в подкаталог. Инструменты, которые мне нужны, являются необязательными, и мне нужна только возможность их запуска специально. – aquo