如何使用makefile创建测试结果

时间:2014-11-14 15:45:22

标签: linux makefile

我有一个C程序 - example.c,一旦编译,我想用它来生成测试结果。 ./tests/%.in下的每个文件都是一个测试用例。

我希望他们每个人都能创建./tests/%.out

我尝试过类似的东西:

all: test_results

example: example.c
    gcc example.c -o example

test_results: example ./tests/%.out

./tests/%.out: ./tests/%.in
   ./example $^ > $@

但我得到了错误,而且它似乎并没有真正完成这项工作。

1 个答案:

答案 0 :(得分:1)

%是仅在模式规则中使用的通配符,如果要将每个文件放在目录下,请使用*以及wildcard函数:

all: test_results

example: example.c
    gcc example.c -o example

TEST_INPUT = $(wildcard tests/*.in)
test_results: example $(TEST_INPUT:.in=.out)

./tests/%.out: ./tests/%.in
    ./example $^ > $@

此外,您可以删除路径的./前缀,并且可能希望制定alltest_results规则phonyexample规则的test_results依赖关系也是错误的(如果.out已过时,它将不会更新example文件),它应该是{.out的依赖关系。 1}}文件本身:

.PHONY: all
all: test_results

example: example.c
    gcc example.c -o example

TEST_INPUT = $(wildcard tests/*.in)
.PHONY: test_results
test_results: $(TEST_INPUT:.in=.out)

tests/%.out: tests/%.in example
    ./example $< > $@