2009-09-30 6 views
4

У нас есть проект autotools, который имеет смесь тестов на единицу и интеграцию, все из которых выполняются с помощью команды make check. Это не идеально, поскольку некоторые из тестов интеграции занимают некоторое время и имеют всевозможные зависимости (база данных и т. Д.).Добавление дополнительных целей make/test в проект autotools

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

Есть ли простой (или иначе) способ добавить дополнительную цель?

ПРИМЕЧАНИЕ. Возможно, я должен добавить, что это большой проект, поэтому редактирование/сохранение каждого файла makefile нежелательно. Я хотел бы сделать это «путь автопотоков», если это возможно.

- UPDATE 1 -

Я попытался решение Jon «s, и это шаг ближе, но не совсем там. У меня все еще есть пара вопросов:

1) Рекурсия - я в порядке с модификацией makefile.am в корне дерева сборки, а также в любой директории, содержащей тесты, но похоже, что это способ сделать это, когда мне не нужно менять каждый Makefile.am в иерархии. (цель проверки работает таким образом, в конце концов)

2) .PHONY - Я продолжаю получать сообщения о .PHONY, будучи переопределенными. Это понятно, потому что он устанавливается другим пакетом (в частности, doxygen). Как мне заставить обоих играть вместе?

ответ

0

Поскольку откликов больше не было, я собираюсь ответить своим решением.

Я решил проблему рекурсии, исключив рекурсию. Используя в качестве руководства this page , я переключил весь проект из рекурсивного make на нерекурсивный make. Затем я клонировал нерекурсивные контрольные объекты (check, check-am, check-TESTS и т. Д.) В новый набор целей для тестов интеграции. Пока это работает очень хорошо.

Примечание: вам может быть интересно, почему я не просто клонировал рекурсивные цели. Честно говоря, я не мог их найти. Либо я не знал, где искать (правила не были в созданном Makefile), либо что-то происходит неявно, и я не понимаю autotools достаточно хорошо, чтобы следовать за ним.

Что касается вопроса с переопределением .PHONY, я до сих пор не нашел решения, кроме условного исключения другого определения, когда я делаю тесты интеграции.

4

В ваших файлах все синтаксис make передается в сгенерированный Makefile. Поэтому, если вы хотите, чтобы новая цель просто создавала ее, как в Makefile, она появится в автоматически создаваемом Makefile. Поместите следующее внизу своих файлов.

 
integration-tests: prerequisites.... 
     commands to run test 

.PHONY: integration-tests 
+0

Что делает '.PHONY'? –

+0

@KarlRichter .PHONY означает, что интеграционные тесты - это не файл, а просто имя цели – aberaud