Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ scons-编译后运行的程序_C++_Python_Scons - Fatal编程技术网

C++ scons-编译后运行的程序

C++ scons-编译后运行的程序,c++,python,scons,C++,Python,Scons,我想在编译后直接运行构建的程序,这样我就可以用scons构建并启动我的程序 我认为这个SConstruct文件会在重建时启动程序 main = Program( "main", [ "main.cc" ] ) test = Command( None, None, "./main >testoutput" ) Depends( test, main ) 每次我运行scons main = Program( "main", [ "main.cc" ] ) test = Command(

我想在编译后直接运行构建的程序,这样我就可以用
scons
构建并启动我的程序

我认为这个SConstruct文件会在重建时启动程序

main = Program( "main", [ "main.cc" ] )

test = Command( None, None, "./main >testoutput" )
Depends( test, main )
每次我运行
scons

main = Program( "main", [ "main.cc" ] )

test = Command( None, None, "./main >testoutput" )
Requires( test, main )

但两者都不起作用,我的程序从未执行过。我做错了什么?

每次运行SCons时都会运行
ls

ls = Command ('ls', None, 'ls')
AlwaysBuild ('ls')
Default ('ls')
您从未告诉SCons为什么以及何时应该运行您的命令。例如,您应该将其作为依赖项添加到其他目标,或者将其作为默认目标


如果您真的希望始终运行命令,也就是说,不管生成的目标是什么,您可能应该使用标准的Python工具来启动外部程序来运行该命令。

这应该可以更好地只在生成程序时运行该程序

main = Program( "main", [ "main.cc" ] )

test = Command( target = "testoutput",
                source = "./main",
                action = "./main > $TARGET" )
Depends( test, main )
并使用AlwaysBuild()每次运行它,正如@doublep所提到的,如下所示:

main = Program( "main", [ "main.cc" ] )

test = Command( target = "testoutput",
                source = "./main",
                action = "./main > $TARGET" )
AlwaysBuild( test )
如果您想查看testoutput的内容,可以执行以下操作:

(假设是Linux,用一些Python代码打印文件会更便于移植)


我怎样才能在程序重建后运行它?(始终运行我的程序,现在对我有效)使命令依赖于程序。然后,将在运行前重建可执行文件(如果需要)。即
x_program=program('x',…);x=命令('x',无,./x');依赖('x',x_程序)
Hmm,这对我不起作用:
为以下对象指定了多种方法来构建相同的目标:x
啊,对不起,在我的示例中,我为程序和命令指定了相同的目标。我想只要您使用Python变量来创建对它的依赖关系,您实际上就不需要target命令。但是,代码看起来与我的第一个示例完全一样,不是吗?当我在操作和源代码中使用
#
时,不再生成testoutput。scons打印
#/main>testoutput
,但
testoutput
不存在,因此始终打印此行。有没有办法做到这一点,而不用将其写入testoutput而不是stdout?我想立即查看结果,不想查看此文件。@dinfuehr,我要到明天早上才能进行测试。我的解决方案是否适用于使用“/main”而不使用“#”的用户?我不明白你问的关于stdout的问题。是的,如果没有它,它会起作用。我想知道是否有可能只使用“/main”(不带“>$TARGET”)这样的操作,这样我在调用SCON时就可以直接看到程序的输出,而不必检查输出文件。@dinfuehr,我必须测试一下,但试着使用
action=“./main”
TARGET=None
。这样做可能会使依赖项检查在第一个示例(使用依赖项)中不起作用,也可能在第二个示例中不起作用。我会用更好的方法更新答案。@Dinfueehr,我今天能够测试这个。如果您有变体_dir,则最好使用“#”字符。将Command()目标参数设置为None将无法正常工作,如果将目标和源设置为None,也无法正常工作。如果您希望在编译后执行命令并查看结果,那么我的答案中的第三个示例会起作用,其中我为command()生成器指定了一个操作列表。我认为这是最优雅的解决方案。
main = Program( "main", [ "main.cc" ] )

test = Command( target = "testoutput",
                source = "./main",
                action = ["./main > $TARGET",
                          "cat $TARGET"] )
AlwaysBuild( test )