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 )

そして、次のように@doublepで言及されているように、AlwaysBuild()を使用して毎回実行します。

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

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

また、testoutputの内容を確認したい場合は、次のようにすることができます。

(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 に伝えたことはありません。たとえば、他のターゲットへの依存関係として追加するか、デフォルトのターゲットにする必要があります。

command を本当に常に実行したい場合、つまり、どのターゲットがビルドされているかに関係なく、外部プログラムを起動するための標準的な Python 機能を使用して実行する必要があります。

于 2012-06-17T10:01:23.713 に答える