2009-12-16 7 views
0

J'ai un projet SCons mis en place comme suit:Exprimant une Dépendances propres de SConscript

Project/ 
    SConstruct # "SConscript('stuff/SConscript', variant_dir = 'build') 
    stuff/ 
     SConscript # "import configuration" 
     configuration/ 
      __init__.py 
      Thing.py 

Lors de la construction, le SConscript est copié dans le répertoire de construction, mais le module « configuration » est pas. Ordinairement, on exprimerait une dépendance de fichier avec la fonction Depends() (par exemple Depends(program, object_files)). Dans ce cas, cependant, le fichier SConscript est lui-même la "cible" de la dépendance. Comment est-ce que je l'exprime dans mon SConscript?

Répondre

1

J'ai deux solutions de contournement pour vous. Je les appelle des solutions de contournement parce qu'ils n'expriment pas la dépendance dans le SConscript.

  1. Faites la 'configuration d'importation' de votre SConstruct (vous devez modifier sys.path)

  2. En substance/SConscript, ajoutez le répertoire source sys.path:

 
    import sys 
    sys.path += ['%s/stuff' % (Dir('#').abspath)] 

    import configuration 
+0

# 2 totalement travaillé. Merci! –

0

Premièrement, avez-vous vraiment besoin de dépendance sur vos fichiers source de script SCons? À quelle fréquence changent-elles, et si elles changent est-ce vraiment si onéreux d'exiger que votre utilisateur fasse une construction propre s'il balaie avec le (s) fichier (s) de configuration SConscript.py.

Si vous en avez besoin, ne le voyez-vous pas actuellement? J'ai trouvé que SCons était plutôt bon pour savoir si et comment les fichiers SConscript.py avaient changé. Plus précisément, si vous avez des fonctions python user defined builders with custom action? Pour mon flux de build EDA qui a des tas de fonctions python définies par l'utilisateur qui appellent la myriade d'outils EDA propriétaires, si je change n'importe quel fichierSConstruct.py, tous les résultats de mes builders python personnalisés sont supposés être invalides (doit à mon grand regret , souvent). Pour info, j'utilise la version 1.2.0.d20090223.

+0

Il n'est pas si important que la construction soit régénérée, mais plutôt que le chemin d'accès à l'importation est directement disponible pour le SConscript dans la construction. Mon erreur actuelle est "Aucun module nommé configuration". –

+1

Oh, je vois. Dans notre flux, nous avons une variable d'environnement qui spécifie la racine du bac à sable. L'autre chose que j'ai trouvé était que vous vouliez encapsuler l'appel de scons, donc vous faites un cd $SANDBOX et ensuite appelez scons. (il y a peut-être un moyen d'accomplir ceci dans Scons, mais je voulais aussi passer certaines options par défaut à scons - options pour lesquelles Scons ne vous permettra pas d'utiliser la méthode SetOption, par exemple l'option 'num_jobs') –