我有一个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 $^ > $@
但我得到了错误,而且它似乎并没有真正完成这项工作。
答案 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 $^ > $@
此外,您可以删除路径的./
前缀,并且可能希望制定all
和test_results
规则phony。 example
规则的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 $< > $@