2010-08-19 88 views
1

我有一个包含规则的生成文件来构建系统,测试并运行它们。最后一项是通过调用一个shell脚本来执行的。除此之外,这阻止了我并行运行测试。如何使makefile规则执行其先决条件?

我有以下变量:

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

,并建立与规则测试

$(TESTS): %: %.c 
    $(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] $< 

是否有可能(如果有的话,怎么样?)创建规则“测试”在运行时,会执行$TESTS变量中的每个项目?

回答

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) 
+0

非常感谢! – Tordek 2010-08-19 18:02:18

0

我相信,像这样的规则:

run_tests: $(TESTS) 

应该做的伎俩:

$ make run_tests 

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

+0

$(测试)是_builds_测试的规则。如果我想重新运行测试会很麻烦,因为这意味着重新编译它们。 – Tordek 2010-08-19 03:48:45

+0

更重要的是,这不会实际运行测试。 – Beta 2010-08-19 14:49:58