2010-06-07 6 views
5

actuellement j'essaye de porter un projet d'héritage de million-sloc des manuscrits .cmd stupides aux SCons. Certaines parties sont VC++, d'autres sont Delphi. Créer des scripts SConscripts pour les pièces C++ était un jeu d'enfant.Comment puis-je forcer le générateur SConscript à changer de répertoire?

Pour construire la partie delphi, j'ai écrit un générateur très simple qui détecte s'il s'agit d'un projet de programme ou de bibliothèque. Appeler le constructeur après le chaînage via SConscript permet à scons d'appeler dcc32 $ subdir/project.dpr ce qui trompe dcc32 pour rechercher des unités dans le répertoire courant au lieu du $ subdir.

Y at-il un moyen de dire à scons d'entrer dans le sous-répertoire $ avant d'exécuter les commandes résidant dans le sconscript ou devrais-je le réparer dans le constructeur?

Nous vous remercions à l'avance

Répondre

5

SCons déjà des changements dans le répertoire des SConscripts sous-répertoire lors de leur lecture, il semble que le problème va être fixé dans le constructeur réel. Une fois que les scripts ont été analysés et que SCons exécute les commandes de construction, il reste dans le répertoire de niveau supérieur.

Les commandes sont ensuite émises en utilisant les noms de chemins relatifs à ce répertoire de premier niveau. La façon de modifier ce comportement consiste à utiliser le mot-clé chdir dans votre générateur.

L'exemple de la page de manuel scons se présente comme suit:

b = Builder(action='build < ${SOURCE.file} > ${TARGET.file}', 
      chdir=1) 
env = Environment(BUILDERS = {'MyBuild' : b}) 
env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in') 

Vous devez spécifier le composant .file que l'utilisation de chdir ne change pas les noms passés au constructeur, à savoir qu'ils sont encore par rapport à le répertoire de premier niveau.

+0

C'est exactement la combinaison dont j'ai besoin. Votre solution a résolu mon problème. Merci beaucoup! – Damg