2016-09-01 10 views
0

В стандартной схеме проектаAutomake: добавление локального поведения удобства «сделать чек»

$(src_topdir)/include 
$(src_topdir)/src 
$(src_topdir)/tests 

Я хотел бы запустить все тесты в $(src_topdir)/tests при вводе «сделать чек» в $(src_topdir)/src в дополнении к управлению любому сконфигурированные тесты в $(src_topdir)/src.

Automake обеспечивает расширение, чтобы добавить дополнительные цели к цели в check Makefile, добавляя (в Makefile.am) мишень local-check, которую я могу определить для

local-check: 
     cd ../tests && $(MAKE) $(AM_MAKEFLAGS) check 

И в то время как это позволяет мне make check в пределах $(src_topdir)/src с удовлетворением удовлетворительно, к сожалению, он прерывает звонок make check из каталога $(src_topdir). Это связано с тем, что вызов от $(src_topdir) рекурсивно вводит как $(src_topdir)/src, так и $(src_topdir)/tests, дважды запуская тесты в $(src_topdir)/tests.

Есть ли способ, в котором я мог бы изменить мой Makefile.am в $(src_topdir)/src таким образом, что местные make check звонков вызвать желаемое дополнительное тестирование во время make check звонков от остальной части инструмента не влияют?

ответ

1

В Automake нет возможности сделать это.

Обходным путем является простое изменение названия цели. То есть вместо ввода make check введите make mycheck (или что вам угодно). Тогда правило mycheck очень легко писать.

Другая идея - просто отказаться от подкаталога Makefile. В наши дни, как правило, лучше всего иметь один Makefile для всего дерева. Тогда эта проблема уходит - или, если вы действительно этого хотите, с этим вы можете написать крошечный src/Makefile, который просто имеет цель check.

+0

спасибо. Я пришел к более или менее такому же выводу. У меня есть обходной путь, который работает для одного каталога, но не работает, когда одни и те же вызовы выполняются другими. Чтобы уменьшить это влияние, я в основном добавляю команды, которые выполняют требуемые операции из каталога верхнего уровня. (top-clean, top-make, top-check), которые в основном перемещаются вверх, пока файл make не станет файлом $ topdir, а затем выдаст соответствующую цель make. –