我有一个包含规则的makefile,用于构建系统,测试和运行它们。最后一项只需调用一个shell脚本即可执行。除此之外,这使我无法并行运行测试。
我有以下变量:
TEST_SRC=$(wildcard tests/*.c)
TESTS=$(patsubst %.c,%,${TEST_SRC})
并使用规则
构建测试$(TESTS): %: %.c
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
是否可以(如果是,如何?)创建一个规则“测试”,在运行时,将执行$TESTS
变量中的每个项目?
答案 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)
作为依赖项并首先运行它们。