2015-11-02 87 views
0

我在某个目录d中编写了我的项目。我有一套庞大的测试用例。所以我想把它们放在d的内部目录din。另外我想将输出文件存储在dout中。如何实现这一目标?在生成文件中切换目录

对于现在我生成文件的一部分,看起来像:

test: 
    ./a.out <input1.c> output1.txt 
    ./a.out <input2.c> output2.txt 
    . 
    . 
    . 
    . 
    ./a.out <inputn.c> outputn.txt 

(N已知)

make test现在执行程序。

编辑: <>的问题

+1

你是否在'din /'目录中提供'input#.c'和'output#.txt'(尽管你的文件名是向后的不是吗?)并修复这些命令以匹配?因为这只是把'din /'放在每个文件名的开头(并将文件移动到目录中)。 –

回答

1

修正创建一个子目录din。把你的Makefile在那里运行测试。

在主目录的Makefile,输入规则

test: 
    $(MAKE) -C din test 

我还要重写现有Makefile

首先,你不想为每个文件重复相同的事情。你可以在这里使用模式规则。所以规则变成

output%.txt: input%.c 
    a.out < $< > [email protected] 

现在如何使test目标取决于每个输出文件?

如果有一个构造使用上述规则列出可以从现有文件制作的每个文件,但是没有,那将是非常好的。但是,我们可以采取的.c结束现有的文件列表并将其转换为与GNU make的wildcardpatsubst功能相应的输出文件,虽然它是丑陋:

test: $(patsubst output%,input%,$(patsubst %.c,%.txt,$(wildcard *.c))) 

现在,你只有两个规则,一个命令。

+0

谢谢..它帮助了很多 – Curious

+0

感谢您的编辑建议。其他人拒绝了,但我已经应用了它。 – reinierpost