2011-08-17 26 views
8

Tôi muốn chạy lệnh trong SCons không có bất kỳ tệp đầu vào/đầu ra nào (thực tế đầu vào và đầu ra là cùng một tệp). Tại thời điểm này tôi chỉ cần tự chạy nó với subprocess.Popen nhưng là có một cách sconsy hơn để làm điều đó?Chạy lệnh trong SCons không phụ thuộc

Trả lời

13

Bạn có thể sử dụng chức năng Command để chạy bất kỳ lệnh bên ngoài nào bạn chạy qua Popen và bạn có thể sử dụng chức năng AlwaysBuild để đảm bảo lệnh của bạn luôn chạy ngay cả khi tệp đích tồn tại. Scons không thích chu kỳ phụ thuộc, vì vậy hãy để trống danh sách nguồn.

myfile = env.Command('myfile.out', [], 'echo Hello world > $TARGETS') 
env.AlwaysBuild(myfile) 

Bàn phím wiki cũng có công thức cho PhonyTargets giúp dễ dàng thiết lập nhiều lệnh đơn giản.

+0

Nếu đã có quy tắc để xây dựng 'myfile.out' thì nó than phiền có nhiều cách để tạo mục tiêu. Tôi muốn có một quy tắc để tạo tệp và một quy tắc khác để sửa đổi nó. –

+0

Tôi nghĩ rằng có hai quy tắc cho một mục tiêu là một ý tưởng tồi. Làm thế nào để scons biết liệu quy tắc 'sửa đổi' đã được gọi hay chưa nếu mục tiêu tồn tại? Nó sẽ hoạt động tốt hơn nếu bạn có hai mục tiêu, một cho mỗi quy tắc. Hoặc có một quy tắc thực hiện cả hành động 'tạo' và 'sửa đổi'. –

+0

Chú ý đến các tài liệu scons nơi nó nói 'AlwaysBuild' là một tên gây hiểu nhầm. Vẫn còn một số quy tắc scons đánh giá trước khi thực sự phát hành lệnh. –

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