7

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

我认为这个 SConstruct-File 会在重建程序时启动程序。

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 )

但两者都不起作用,我的程序永远不会执行。我究竟做错了什么?

4

2 回答 2

8

只有在构建程序时,这应该更好地运行程序。

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 )

如果你想查看测试输出的内容,你可以这样做:

(假设 Linux。用一些 Python 代码打印文件会更便携)

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

test = Command( target = "testoutput",
                source = "./main",
                action = ["./main > $TARGET",
                          "cat $TARGET"] )
AlwaysBuild( test )
于 2012-06-17T11:15:40.607 回答
4

ls每次运行 SCons 时都会运行:

ls = Command ('ls', None, 'ls')
AlwaysBuild ('ls')
Default ('ls')

您从未告诉 SCons 为什么以及何时应该运行您的命令。例如,您应该将其作为依赖项添加到其他目标或使其成为默认目标。

如果你真的想一直运行命令,即不管正在构建什么目标,你可能应该使用标准的 Python 工具来运行它来启动外部程序。

于 2012-06-17T10:01:23.713 回答