如何为SCons指定标准输入文件

时间:2016-01-27 17:22:04

标签: python scons

我有一个C程序“add.c”,一个输入文件“input.txt”。我希望使用SCons编译该程序并将标准输出存储到名为“output.txt”的文件中。如何使用SCons构建实用程序实现此目的?如何制作一个能够完成这项工作的python脚本?

compute(input_source_code,input_file_for_input_source_code) {//generate output file}

我阅读了SCons的文档,它讨论了多个输入源文件,但我无法理解如何为已编译的源文件指定输入(stdin)。

进一步澄清 - 我正在尝试使用Python / Django构建在线作业分级器。我希望为这项具体任务完成的任务是: 编译给定的C程序 - 使用一些预定义的输入提供所有C程序,然后将执行C程序生成的输出存储到另一个文件中。如果我理解正确,SCons允许我构建/制作C程序文件,但是如何指示SCons从特定C程序的特定文件中获取输入。这是我试图通过SCons构建的C程序应该从特定文件中获取输入。

Compile a C/C++ Program and store standard output in a File via Python Sam Noir的答案之一解决了我的问题,但它仅适用于Mac / Linux,但在Windows中不起作用 - 这就是我尝试使用SCons构建实用程序来完成此任务的原因。

我想我可以添加一个例子:

C文件(add.c)

#include <stdio.h>
int main()
{
int a,b;
scanf("%d", &a);
scanf("%d", &b);
printf("%d", a+b);
return 0;
}

input.txt中:

3 7

Python脚本:

BUILD(add.c - fetch the required input from input.txt) and 
store the output into another file output.txt 

(所以它应该在output.txt中打印10)。

所以基本上我想使用SCons来构建和运行add.c文件,并通过确保从input.txt获取add.c所需的任何输入来生成output.txt。

1 个答案:

答案 0 :(得分:2)

对于您给出的示例,您可以尝试以下内容:

env = Environment()
# Build the program and store a reference to it
prog = env.Program("cl_add", "add.c")
# Create a Command to run, relies on shell redirection
out = env.Command('output.txt','input.txt','%s < $SOURCE > $TARGET' % str(prog[0]))
# Let the Command depend on the Program created above
env.Depends(out, prog)
在您的SConstruct中

。另请参阅http://scons.org/doc/production/HTML/scons-user.html上的UserGuide,第3章。 19.“不编写构建器:命令构建器”。