2009-09-22 43 views
7

Tôi cần chạy hai chương trình theo thứ tự như một phần của trình tạo tùy chỉnh.lấy thư mục gốc của scons

Một trong số đó là chương trình mà tôi bị kẹt và không thể xử lý đường dẫn tuyệt đối/tương đối, vì vậy tôi phải sử dụng tùy chọn chdir=1 của Trình tạo để các hành động của nó chạy trong cùng thư mục với mục tiêu.

Thứ hai là tập lệnh nằm trong thư mục con tools của dự án; tệp SConstruct nằm trong thư mục gốc của dự án. Tôi cần phải tạo một hành động để chạy tập lệnh này và đang gặp sự cố vì tôi không có đường dẫn tuyệt đối đến dự án cũng như đường dẫn tương đối từ thư mục trong đó mục tiêu được đặt lại lên thư mục con tools nơi tập lệnh được đặt . Nếu tôi bằng cách nào đó có thể có được đường dẫn tuyệt đối đến thư mục gốc của dự án của tôi, tôi sẽ được tất cả các thiết lập, tôi chỉ có thể nối `công cụ/myscript.bar 'và được thực hiện với nó.

Đây là những gì tôi có, nhiều hơn hoặc ít hơn:

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

Vấn đề là tôi cần phải thay đổi hành động trong câu hỏi để "myscript.bar" có thể được tìm thấy, một cái gì đó như:

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

Điều này có vẻ đơn giản nhưng tôi không thể tìm ra cách.

Trả lời

3

Grrr. Nó đơn giản; điều này dường như hoạt động.

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

Bạn nên sử dụng "#" để biểu thị đầu thư mục nguồn.

print Dir('#').abspath 

Phiên bản này cũng hoạt động nếu bạn sử dụng số variant directory. Ví dụ trong SConstruct:

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

Sau đó, trong main.scons:

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

Đầu tiên sẽ in /path/to/project/build, trong khi thứ hai sẽ hiển thị đúng /path/to/project.

Các vấn đề liên quan