2012-09-22 20 views
5

Tôi đang sử dụng yacc và lex với Visual Studio 2012 C++/CLI và đã tạo ra một bước tùy chỉnh xây dựng cho các tập tin nguồn yacc như thể hiện trong hình dưới đâyTại sao Visual Studio 2012 chạy bước xây dựng tùy chỉnh khi tệp nguồn chưa được thay đổi?

Custom Build Property Page

Có hai phụ thuộc cho các tập tin đầu ra . Chúng là tệp icl5kyacc.y nguồn yacc và tệp mẫu yyparse.c. Mỗi khi tôi xây dựng giải pháp, bước xây dựng tùy chỉnh chạy ngay cả khi tệp nguồn yyparse.c và icl5kyacc.y chưa được sửa đổi. Đây là danh sách thư mục sau một bản dựng.

21-Sep-2012 10:19:18p   28,210 A icl5kyacc.y 
    17-Sep-2012 7:32:06p   9,042 A yyparse.c 
    22-Sep-2012 11:43:56a   38,233 A ICL5KYACC.cpp 
    22-Sep-2012 11:43:56a   2,160 A icl5kyacc.h 

Và sau khi xây dựng lại

2> Tạo icl5kyacc.cpp từ icl5kyacc.y

21-Sep-2012 10:19:18p   28,210 A icl5kyacc.y 
    17-Sep-2012 7:32:06p   9,042 A yyparse.c 
    22-Sep-2012 11:45:46a   38,233 A ICL5KYACC.cpp 
    22-Sep-2012 11:45:46a   2,160 A icl5kyacc.h 

Tôi có sai lầm khi tin rằng bằng cách sử dụng một bước tùy chỉnh xây dựng nên tự động áp dụng quy tắc phụ thuộc tiêu chuẩn giữa các tệp đầu vào và đầu ra của bước xây dựng? Một điều mà tôi tò mò là đoạn mã % (AdditionalInputs) mà Studio đã đưa vào cho tôi trong phần Phụ thuộc bổ sung. Không chắc chắn đó là gì hoặc nếu đó là bằng cách nào đó trỏ đến một tập tin đang được sửa đổi.

+0

Xóa macro **% (AdditionalInputs) ** không ảnh hưởng đến vấn đề này. – JonN

Trả lời

3

Vấn đề là% (Thư mục) là đường dẫn tương đối từ gốc của giải pháp đến thư mục dự án "ICL5K \ ICL5K \" và trong khi xây dựng thư mục hiện tại đã là thư mục dự án. Vì vậy, phụ thuộc yyparse.c đã được tìm kiếm trong C: \ ICL5K \ ICL5K \ ICL5K \ ICL5K. Tôi nên đã sử dụng $ (ProjectDir) mà là một đường dẫn đầy đủ từ gốc bao gồm cả specifier ổ đĩa "C: \ ICL5K \ ICL5K \". Nhưng thậm chí tốt hơn là nhận ra rằng tất cả các tệp đầu vào và đầu ra đều nằm trong thư mục dự án và đã là thư mục mặc định hiện tại và xóa tất cả các thư mục macro như được hiển thị bên dưới image here Ngoài ra, không cần phải chỉ định icl5kyacc.y phụ thuộc vì bước xây dựng tùy chỉnh là thuộc tính của icl5kyacc.y để tệp đó đã được bao gồm dưới dạng phụ thuộc.

3

Bạn có chắc chắn rằng các tệp Xuất của bạn thực sự nằm ở nơi bạn chỉ định không?

Nhìn vào danh sách của bạn, bạn có đầu vào được liệt kê tại %(Directory)yyparse.c (điều này cũng phải bao gồm tệp .y). Không phải đầu ra của bạn cũng được đặt trong %(Directory)icl5kyacc.h%(Directory)ICL5KYACC.cpp, thấy rằng danh sách của bạn dường như chỉ ra rằng chúng nằm trong cùng một thư mục.

Tác vụ xây dựng sẽ chạy lại nếu không tìm thấy tệp đầu ra hoặc nếu tệp đầu ra cũ hơn tệp đầu vào. Nếu đường dẫn của bạn sai đối với các tệp đầu ra thì công cụ sẽ không tìm thấy chúng và giả định rằng tác vụ xây dựng cần chạy lại.

+0

Câu trả lời của bạn trong khi không hoàn toàn chính xác dẫn đến giải pháp. Tôi nghĩ rằng% (Directory) là đường dẫn đầy đủ từ thư mục gốc đến thư mục dự án cũng là thư mục hiện tại trong quá trình xây dựng. % (Thư mục) trỏ đến thư mục dự án nhưng không có ổ đĩa hoặc dấu gạch chéo hàng đầu "ICL5K \ ICL5K \" không hữu ích vì nó là đường dẫn tương đối từ gốc của giải pháp. Những gì tôi muốn là $ (ProjectDir) là "C: \ ICL5K \ ICL5K \". Mặc dù tôi đã tìm thấy một giải pháp đơn giản hơn là xóa tất cả các macro% (Thư mục) vì tất cả các tệp nằm trong thư mục dự án và đã là thư mục hiện tại. – JonN