2016-03-29 34 views
1

Mein Ziel ist boost::test Unit-Tests in SCons auszuführen. In der SConstruct Datei haben folgende ich Stück Code:SCONs seltsame Reihenfolge der Ausführung

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 zugewiesen nextTest kehrt ein Programm:

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

Return('prgs') 

Dieses Problem wird folgende Fehler auftritt nach scons -c Befehl. Nächstes Mal, wenn ich laufe scons es gibt mir:

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) 

Es sieht aus wie vor dem Programm durch Sconscript erstellt wird der Anruf ausgeführt wird. Was kann ich damit machen? Ich bin neu in SCons und ich bin fertig mit Verstecken mit diesem Tool. Es wird buchstäblich vor allem anderen ausgeführt (es werden keine .obj/.lib-Dateien erstellt).

Darüber hinaus funktioniert der Code, weil ich es zu .exe kompilieren kann, wenn ich subprocess zu Alias ändern. Aber das ist nicht was ich will. Mein Ziel ist es, Testergebnisse während des Builds zu drucken.

Antwort

2

O.k. Ihr Problem besteht darin, dass Sie Subprozess zum Starten von Prozessen verwenden, anstatt einen Builder zu erstellen oder Command() zu verwenden.

SCons läuft in mehreren Phasen, von denen die erste die gesamte SConstruct/SConscript-Logik verarbeitet, die mit der Erstellung eines Abhängigkeitsgraphen beginnt.

Nachdem SCons Scanner ausgeführt und die vollständige Abhängigkeitsstruktur erstellt hat, durchläuft es diese Baumstruktur und führt Befehle aus.

So werden Ihre Subprozesse ausgeführt, bevor SCons überhaupt etwas aufbauen können.

Hier ist eine unpolierte Erklärung: https://bitbucket.org/scons/scons/wiki/SconsProcessOverview

Sie könnten versuchen, die für nextTest Schleife von Ihrem SConstruct fallen, sondern so etwas wie diese setzen in Ihrem 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') 

Beachten Sie, dass viele dieser bedeckt ist im Benutzerhandbuch. http://scons.org/doc/production/HTML/scons-user/index.html

+0

Ihre Erklärung löste mein Problem in der Tat. Vielen Dank. –

Verwandte Themen