如何使makefile规则执行其先决条件?

时间:2010-08-19 03:35:02

标签: makefile

我有一个包含规则的makefile,用于构建系统,测试和运行它们。最后一项只需调用一个shell脚本即可执行。除此之外,这使我无法并行运行测试。

我有以下变量:

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

并使用规则

构建测试
$(TESTS): %: %.c
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<

是否可以(如果是,如何?)创建一个规则“测试”,在运行时,将执行$TESTS变量中的每个项目?

2 个答案:

答案 0 :(得分:5)

你可以这样做:

# 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)

答案 1 :(得分:0)

我相信这样的规则:

run_tests: $(TESTS)

应该做的诀窍:

$ make run_tests

它不会执行任何操作,但会将$(TESTS)作为依赖项并首先运行它们。