2010-06-07 4 views
5

zur Zeit versuche ich ein Millionen-Sloc-Projekt von dumpfen .cmd-Skripten zu SCons zu portieren. Teile davon sind VC++, andere sind Delphi. Erstellen SConscripts für die C++ Stücke war ein Kinderspiel.Wie kann ich den SConscript-Builder zwingen, das Verzeichnis zu ändern?

Um den Delphi-Teil zu erstellen, habe ich einen sehr einfachen Builder geschrieben, der erkennt, ob es sich um ein Programm oder ein Bibliotheksprojekt handelt. Der Aufruf des Builders nach der Verkettung über SConscript veranlasst scons dazu, dcc32 $ subdir/project.dpr aufzurufen, was dc32 dazu verleitet, nach Einheiten im aktuellen Verzeichnis statt nach dem Unterverzeichnis $ zu suchen.

Gibt es eine Möglichkeit zu sagen, dass SCONs das Subdir $ eingeben, bevor Befehle ausgeführt werden, die sich im sconscript befinden, oder sollte ich es innerhalb des Builders reparieren?

Vielen Dank im Voraus

Antwort

5

SCons ändert sich bereits in das Verzeichnis von Unterverzeichnis SConscripts, wenn sie zu lesen, so sieht es aus wie das Problem in der eigentlichen Erbauer befestigt werden haben wird.

Sobald die Skripts geparst sind und SCons die Build-Befehle ausführt, verbleibt es im Verzeichnis der obersten Ebene. Befehle werden dann unter Verwendung von Pfadnamen relativ zu diesem obersten Verzeichnis ausgegeben. Um dieses Verhalten zu ändern, verwenden Sie das Schlüsselwort chdir in Ihrem Builder.

Das Beispiel aus der scons Manpage ist wie folgt:

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') 

Sie benötigen die .file Komponente als die Verwendung von chdir angeben nicht die Namen an den Bauherrn übergeben ändern, das heißt, sie noch bezüglich zu das oberste Verzeichnis.

+0

Das ist genau die Kombination, die ich gebraucht habe. Deine Lösung hat mein Problem behoben. Vielen Dank! – Damg