проверять двоичный файл перед запуском правила Make - PullRequest
1 голос
/ 21 марта 2012

у меня есть это простое правило:

.PHONY: test
test: src/*Test.php
    $(PHPUNIT) $?;\

это будет выглядеть как мои тесты и запустить phpunit.

Я хотел получить что-то вроде: (предупреждение, недопустимый синтаксис make-файла)

ifneq($(HAS_PHPUNIT),)
test: testok
else
test: testbad
endif

testok: src/*Test.php
    $(PHPUNIT) $?;\

testbad:
    echo "test: failed checking for executable file $(PHPUNIT)";\
    echo "      You may need to install phpunit";\

Я мог бы использовать текущий код и просто добавить if [ ! -e $(PHPUNIT) ]; then warn; else test it; done, но тогда if будет слишком многословным, так как он будет предупреждать пользователя один раз за файл.

что за образец я здесь упускаю?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

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

TESTS:=$(wildcard *.test)
TEST_TARGETS=$(patsubst %,run_%,$(TESTS))
.PHONY: test

test: $(TEST_TARGETS)

run_%: check_php_unit
        @echo Running test $(*)

check_php_unit:
        @echo Checking for php unit

То есть, создайте фиктивную цель для каждого тестового файла, который выполняет этот набор тестов, затем сделайте так, чтобы эти цели зависели от цели check_php_unit. Команды для check_php_unit могут выполнить любую проверку, которую вы хотите, и затем распечатать предупреждение, или выйти с кодом ошибки и вызвать завершение запуска программы, или как вам угодно.

1 голос
/ 04 апреля 2012

Я сделал следующий make-файл

.PHONY: check
check:
    @[ -f `which cmake` ] ||  $(error Install cmake first)

.PHONY: check2    
check2:
    @[ -f `which cmake` ] || echo "Install cmake first"

.PHONY: exec
exec: check
    @echo "Compiling executable ..."
    @[ -d ./build ] || mkdir ./build
    @cd ./build; cmake ../src; make

В то время как цель check2 работает (когда cmake существует, я не получаю сообщение «Сначала установите cmake», когда нет, я получаю сообщение), target check всегда выходить, даже если cmake существует.

Так что я не могу использовать цель , проверьте для цели exec . Я должен использовать target check2 и, конечно, make завершает работу, потому что не находит cmake.

Я бы хотел, чтобы make завершил работу, прежде чем он начнет выводить "Компилируемый исполняемый файл ...".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...