2009-09-22 20 views
7

Potrzebuję uruchomić dwa programy w sekwencji jako część niestandardowego konstruktora.uzyskiwanie katalogu głównego scons

Jednym z nich jest program, w którym utknąłem i nie mogę sobie radzić z bezwzględnymi/względnymi ścieżkami, więc muszę użyć opcji chdir=1 Buildera, aby jego akcje działały w tym samym katalogu co cel.

Drugi to skrypt, który znajduje się w podkatalogu projektu tools; plik SConstruct znajduje się w katalogu głównym projektu. Potrzebuję utworzyć akcję, aby uruchomić ten skrypt, i mam problem, ponieważ nie mam ani absolutnej ścieżki do projektu, ani ścieżki względnej z katalogu, w którym znajduje się obiekt docelowy, z powrotem do podkatalogu tools, w którym znajduje się skrypt . Gdybym mógł w jakiś sposób uzyskać absolutną ścieżkę do katalogu głównego mojego projektu, byłbym kompletny, mógłbym po prostu połączyć `tools/myscript.bar 'i zrobić z nim.

Oto co mam, bardziej lub mniej:

env['BUILDERS']['FooBar'] = Builder(action = [ 
    'c:/bin/foo.exe ${SOURCE.filebase}', 
    'c:/bin/bar-interpreter.exe myscript.bar ${SOURCE.filebase}', 
    ], chdir=1); 

Problemem jest to, że muszę zmienić działanie w kwestii tak, że „myscript.bar” ​​można znaleźć coś takiego:

env['BUILDERS']['FooBar'] = Builder(action = [ 
    'c:/bin/foo.exe ${SOURCE.filebase}', 
    'c:/bin/bar-interpreter.exe $PATHTOHERE/tools/myscript.bar ${SOURCE.filebase}', 
    ], chdir=1); 

Wydaje się to takie proste, ale nie wiem, jak to zrobić.

Odpowiedz

3

Grrr. To jest proste; to wydaje się działać.

env['BUILD_ROOT'] = Dir('.'); 
Builder(action = ['somecmd ${BUILD_ROOT.abspath}/tools/myscript.bar ...']); 
17

Należy użyć "#", aby wskazać górną część katalogu źródłowego.

print Dir('#').abspath 

Ta wersja działa również w przypadku korzystania z variant directory. Na przykład w SConstruct:

SConscript('main.scons', variant_dir="build") 

potem w main.scons:

print Dir('.').abspath 
print Dir('#').abspath 

Pierwszy drukuje /path/to/project/build, natomiast drugi pokaże prawidłową /path/to/project.

Powiązane problemy