Как заставить правило make-файла выполнить его предварительные требования? - PullRequest
1 голос
/ 19 августа 2010

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

У меня есть следующие переменные:

TEST_SRC=$(wildcard tests/*.c)
TESTS=$(patsubst %.c,%,${TEST_SRC})

, и он строит тесты с правилом

$(TESTS): %: %.c
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<

Можно ли (и если да, то как?) Создать правило "тесты", которое при запуске будет выполнять каждый элемент в переменной $TESTS?

Ответы [ 2 ]

5 голосов
/ 19 августа 2010

Вы можете сделать это так:

# a separate target to run each test
RUN_TESTS = $(addprefix run_, $(TESTS))

# a pattern rule for those targets, which will remake the test iff neccessary
.PHONY: $(RUN_TESTS)
$(RUN_TESTS):run_%:%
  ./$<

# One Rule to Ring Them All, One Rule to... sorry.
.PHONY: tests
tests: $(RUN_TESTS)
0 голосов
/ 19 августа 2010

Я считаю, что правило, подобное этому:

run_tests: $(TESTS)

Должно выполнить трюк:

$ make run_tests

Это ничего не будет выполнять, но оно будет иметь $(TESTS) в качестве зависимостии запустить их первым.

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