2016-03-29 1 views
1

Mon but est d'exécuter boost::test tests unitaires dans SCons. Dans le fichier SConstruct je suit morceau de code:SCons étrange ordre d'exécution

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 affecté à un programme nextTest rendement:

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

Return('prgs') 

Ce problème suit d'erreur après survenant commande scons -c. La prochaine fois que je cours scons il me donne:

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) 

Il ressemble avant que le programme est créé par Sconscript l'appel est exécuté. Que puis-je faire avec ça? Je suis nouveau à SCons et j'en ai fini avec cache-cache avec cet outil. Il s'exécute littéralement avant toute chose (aucun fichier .obj/.lib n'est créé).

En outre le code fonctionne, parce que je peux le compiler à .exe lorsque je change subprocess à Alias. Cependant ce n'est pas ce que je veux. Mon objectif est d'imprimer les résultats des tests pendant la construction.

Répondre

2

O.k. votre problème est que vous utilisez des sous-processus pour lancer des processus au lieu de créer un générateur ou d'utiliser Command().

SCons s'exécute en plusieurs phases, la première consistant à traiter toute la logique SConstruct/SConscript qui commence à générer un graphe de dépendances. Après que SCons exécute des scanners et crée l'arborescence des dépendances complète, elle parcourt cette arborescence et exécute les commandes.

Ainsi, vos sous-processus sont exécutés avant même que SCons puisse commencer à construire quoi que ce soit.

est ici une explication fruste: https://bitbucket.org/scons/scons/wiki/SconsProcessOverview

Vous pouvez essayer laisser tomber la boucle nextTest de votre SConstruct, au lieu de mettre quelque chose comme ça dans votre 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') 

Notez que beaucoup de cela est couvert dans le Guide de l'utilisateur. http://scons.org/doc/production/HTML/scons-user/index.html

+0

Votre explication a résolu mon problème en effet. Je vous remercie. –