2011-10-09 38 views
6

Tôi đang cố gắng sửa đổi các tệp SCons của mình để chúng đặt các tệp được tạo vào một thư mục xây dựng. Ban đầu tôi mặc dù VariantDir có thể là một lựa chọn nhưng đánh giá từ tất cả những gì tôi đọc và các ví dụ nó không làm những gì tôi muốn.Đầu ra SCON trong thư mục Xây dựng

Có cách nào dễ dàng để buộc SCons đưa đầu ra vào một thư mục nhất định mà không phải viết lại tất cả các nguồn và tập lệnh không?

+0

vấn đề với 'VariantDir' là gì? Bạn đã thử sử dụng 'duplicate = 0'? –

+0

Để sử dụng 'Biến thể 'bạn phải bán toàn bộ linh hồn của mình. Điều đó có nghĩa là bạn phải làm mọi thứ trong 'Biến thể 'hoặc không có gì. Điều tôi và rất nhiều người khác muốn là chỉ đặt ** công cụ ** được tạo vào thư mục xây dựng chứ không phải mọi thứ. – abergmeier

+0

Đó không phải là những gì 'duplicate = 0' làm gì? Từ tài liệu: Nhân đôi cây nguồn có thể bị tắt bằng cách đặt đối số trùng lặp thành 0 (số không). Điều này sẽ gây ra scons để gọi các nhà xây dựng bằng cách sử dụng tên đường dẫn của các tập tin nguồn trong src_dir và tên đường dẫn của các tập tin có nguồn gốc trong variant_dir. –

Trả lời

0

Đối mặt với sự thất vọng tương tự, tôi đã thêm một site_scons bổ sung các nhà xây dựng thay thế (ví dụ: "Exe" thay vì "Program") và chỉ định trình phát cho trình tạo đó thay thế phần đường dẫn bằng thư mục build. Điều này đòi hỏi việc sử dụng các builder thay thế trong suốt SConscripts của bạn mặc dù.

Hoặc bạn có thể thử phân lớp Môi trường và viết lại các mục tiêu chính để sử dụng viết lại đích. Sau đó, bạn chỉ định Môi trường làm mặc định (sửa đổi Scons.Script.DefaultEnvironment hoặc một cái gì đó tương tự). Cách tiếp cận này giữ các bản ghi chép tĩnh nhưng có rất lộn xộn và đòi hỏi phải bảo trì nhiều hơn theo thời gian khi thay đổi nội bộ của scons.

0

Sử dụng VariantDir với duplicate=0 sẽ hoạt động.

+0

Điều này sẽ yêu cầu tôi viết lại phần lớn các tập lệnh xây dựng. – abergmeier

0

Bạn có thể sử dụng Cài đặt hoặc InstallAs trên đầu ra mục tiêu. Nó làm việc cho tôi.

lib = env.SharedLibrary(target = "some_target", source = sources); 
env.InstallAs(target = "folder/output_name.ext", source = lib); 
2

Sau khi vật lộn với VariantDir trong một thời gian (nó đã không làm bất cứ điều gì ở tất cả), tôi đã kết thúc bằng variant_dir tham số trong các cuộc gọi cấp SConscript đầu, gây ra tất cả các kết quả đầu ra xây dựng hạ lưu kết thúc trong một song song ' xây dựng 'cây: SConscript(['subdirs/SConscript'], variant_dir='build', duplicate=0) Cấu trúc xây dựng của tôi là cấu trúc phân cấp của các bản ghi trong tiểu mục/thư mục con, v.v. Với cuộc gọi này, các kết quả đầu ra sẽ kết thúc trong các tiểu trình xây dựng/tiểu thư ở cùng cấp như trong nguồn.

Điều này ăn lên một cấp, mặc dù (subdirs), và sử dụng "../build" không giúp đỡ. Giải pháp là phải có một tập tin SConscript cùng cấp như SConstruct và gọi SConscript(['SConscript'], variant_dir='build', duplicate=0)

Xem thêm Force Scons output (exe, obj, lib & dll) to specific build directory - nó có một câu trả lời tương tự

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