Dự án C++ tôi đang làm việc (mà tôi đã chuyển đổi từ VS2008 sang VS2010) được sử dụng để sử dụng một số tệp .cules vcbuild để chỉ định các quy tắc xây dựng tùy chỉnh. Các tệp .rules này có một thuộc tính "AdditionalDependencies" cụ thể cho nút CustomBuildRule, chỉ định một danh sách các tệp cần được tính đến khi làm việc nếu mục tiêu cần xây dựng lại hay không. Các "AdditionalDependencies" này được chuyển thành trung thành tệp .props tương ứng trong quá trình chuyển đổi VS2010.Làm cách nào để thực hiện tùy chỉnh MSBuild Target tùy thuộc vào dấu thời gian của tệp?
Tệp .targets được liên kết với quy tắc xây dựng tùy chỉnh sẽ thêm các thuộc tính AdditionalDependencies
này vào thuộc tính Inputs
của nút Target
. Điều này đảm bảo rằng mục tiêu được thực hiện trong trường hợp bất kỳ tệp nào được liệt kê trong các phụ thuộc không tồn tại, nhưng nó không thực thi đích nếu một trong các phụ thuộc là mới hơn đầu ra của đích. Nó cũng không hoàn toàn chính xác vì không phải tất cả các tệp đều là đầu vào, một vài trong số chúng tham chiếu đến các tệp thực thi có thể được sử dụng trong quá trình xây dựng của mục tiêu. Như vậy, chúng có thể được kiểm tra vào kiểm soát phiên bản và sẽ có mặt, nhưng phiên bản mới hơn của tệp cần kích hoạt việc xây dựng lại mục tiêu bị ảnh hưởng.
Nút MSDN documentation for the Target hiển thị thuộc tính Condition
sẽ hoạt động tốt cho các yêu cầu của tôi, nhưng các điều kiện được tài sản này hỗ trợ không xuất hiện qua quá trình kiểm tra 'Hiện có' đã được thực hiện. Có một điều kiện mà tôi có thể sử dụng sẽ so sánh tem thời gian của hai tập tin (hoặc lý tưởng là dấu thời gian của các tệp hiện được liệt kê trong AdditionalDependencies
đối với tệp đầu ra của Target) và do đó cho phép tôi kích hoạt "xây dựng lại mục tiêu này nếu nó đã lỗi thời những phụ thuộc này"?
Có, tôi biết các thuộc tính Đầu vào và Đầu ra cho mục tiêu. Vấn đề là ngay cả khi các đầu vào bất động sản có chứa tên của 'máy phát điện' thực thi và các dấu thời gian thay đổi, các đầu ra không nhất thiết phải tái sinh. –
Có lẽ "tên của máy phát thực thi" trong thuộc tính đầu vào không đại diện cho một đường dẫn đến tệp, và kết quả là MSBuild không thể phát hiện dấu thời gian đã thay đổi. – KimCM