2010-09-06 8 views
2

J'espère que le titre clarifie ce que je veux demander parce que c'est un peu difficile.SCONS: faire un générateur de script spécial dépend de la sortie d'un autre constructeur

J'ai un SConscript SCONS pour chaque subdir comme suit (le faire sous Linux, si elle importe):

  • src_dir
    • compilateur
      • SConscript
      • yacc SRCs
    • s cripts
      • legacy_script
    • données
      • SConscript
      • fichiers de données pour le yacc

-je utiliser un variant_dir sans copier, f ou par exemple:
SConscript('src_dir/compiler/SConscript', variant_dir = 'obj_dir', duplicate = 0)

Le obj_dir résultant après la construction du yacc est:

  • obj_dir
    • compilateur
      • compiler_compiler.exe

Maintenant, voici l'affaire.
J'ai une autre SConscript dans le répertoire de données qui doit faire 2 choses: 1. compiler les données avec le compilateur compilé yacc
2. Prenez la sortie du compilateur et l'exécuter avec le legacy_script je ne peux pas changer
(le legacy_script, prend la sortie des données compilées et construire des fichiers h pour un autre logiciel à dépendre)

numéro 1 est acheived facilement:
linux_env.Command('[output1, output2]', 'data/data_files','compiler_compiler.exe data_files output1 output2')

mon problème est le numéro 2: Comment puis-je rendre le script dépend des sorties d'une autre cible
Et juste pour clarifier, je dois faire courir SCONS (et seulement si les changements de compiler_output):
src_dir/script/legacy_script obj_dir/data/compiler_output obj_dir/some_dir/script_output
(le script est l'utilisation est: legacy_script fichier_entrée output_file)

J'espère que je me suis fait clair, sentir libre de poser d'autres questions ...

Répondre

0

J'ai récemment eu un problème similaire lorsque j'ai dû compiler d'abord les modèles Cheetah, qui ont ensuite été utilisés par un autre constructeur pour générer des fichiers HTML à partir de différentes sources.

Si vous définissez la sortie de génération du premier générateur comme source pour le second générateur, SCons les exécute dans le bon ordre et uniquement si les fichiers intermédiaires ont changé.

Wolfgang

+0

ouais, mais le constructeur commande doit être dans le SConscript du legacy_script, et il est Src est dans le répertoire obj créé par un autre SConscript, alors comment puis-je lui dire que la Src est là? –

+0

Utilisez '# obj_dir/data/compiler_output' pour faire référence à la sortie générée et utilisez ce fichier comme source pour' # obj_dir/some_dir/script_output'. –

+0

Ça a marché! Merci –