2016-03-29 12 views
1

私の目標はboost::testユニットテストをSConsで実行することです。この問題はscons -cコマンドの後にエラー破壊に対する追従しているSConsの実行順序が奇妙です

prgs = env.Program('model_test_exe', 
        'ModelTest.cpp', 
        LIBPATH = [boost_lib, python_lib], 
        LIBS = [modellib]) 

Return('prgs') 

:プログラムを返しnextTestに割り当てられ

for t in toTest: 
    nextTest = SConscript('#/test/' + t + '/SConscript', 
          variant_dir = test_dir + t, 
          duplicate = 0) 
    for a in nextTest: 
     import subprocess 
     subprocess.call(a.abspath) 

Sconscript:私は、コードの一部を以下しているSConstructファイルで。次回は私はそれが私を与えるsconsを実行します。

C:\Users\...>scons -Q 
WindowsError: [Error 2] The system cannot find the file specified: 
    File "C:\Users\...\Win32Project4\SConstruct", line 51: 
    subprocess.call(a.abspath) 

これは、プログラムが呼び出しが実行されるSconscriptによって作成される前のように見えます。これで何ができますか?私はSConsの新人です。私はこのツールを使って隠すことをやっています。これは文字通り何よりも前に実行されます(.obj/.libファイルは作成されません)。

また、subprocessAliasに変更すると、.exeにコンパイルできるため、コードが機能します。しかし、これは私が望むものではありません。私の目標は、ビルド中にテスト結果を印刷することです。

答えて

2

O.k.問題は、ビルダーを作成するかCommand()を使用する代わりに、サブプロセスを使用してプロセスを起動していることです。

SConsはいくつかの段階で実行されます。最初の段階は、依存グラフを構築するためのSConstruct/SConscriptロジックをすべて処理することです。

SConsがスキャナを実行し、完全な依存関係ツリーを構築した後、SConsはそのツリーを歩き、コマンドを実行します。

SConsが何かの構築を開始する前に、サブプロセスが実行されます。

ここでは玄米の説明です:これが多く覆われていることに注意してくださいが https://bitbucket.org/scons/scons/wiki/SconsProcessOverview

は、あなたがあなたのSConstructからnextTestループのために落としてみてください代わりにSConscriptsにこのような何かを入れ

prgs = env.Program('model_test_exe', 
        'ModelTest.cpp', 
        LIBPATH = [boost_lib, python_lib], 
        LIBS = [modellib]) 

env.Command('outputfile_for_test',prgs,'$SOURCE > $TARGET') 



Return('prgs') 

「ユーザーズガイド」を参照してください。 http://scons.org/doc/production/HTML/scons-user/index.html

+0

あなたの説明は本当に私の問題を解決しました。ありがとうございました。 –