2013-04-30 24 views
5

Tò mò nếu có ai biết cách khắc phục sự cố này; Tôi có một tệp .cpp cụ thể, vì một lý do nào đó, bất cứ khi nào tôi sửa đổi nó (thậm chí chỉ thêm một ký tự trắng) và xây dựng dự án, hãy biên dịch lại một loạt các tệp .cpp không liên quan khác (10-20 trong số đó).Thay đổi tệp .cpp gây Visual Studio 2012 để biên dịch lại các tệp không liên quan

Tệp đó không phải là # include'd trong bất kỳ tệp nào khác (tôi không bao giờ #include .cpp tệp trực tiếp, chỉ .h) và không có phụ thuộc nào khác mà tôi có thể nghĩ đến - dường như với tôi như Visual Studio hiểu lầm cây phụ thuộc, hoặc có một số trạng thái nội bộ bị hỏng liên quan đến quá trình xây dựng của nó. Tôi đã thử xóa .sdf, .suo, ipch /, .user, và thư mục tập tin đối tượng, nhưng vấn đề xuất hiện trở lại sau một thời gian ngắn.

Sửa đổi bất kỳ tệp .cpp nào khác chỉ làm biên dịch lại tệp đó, như mong đợi.

Tôi biết một chút về MSBuild nhưng không thấy bất kỳ điều gì rõ ràng không rõ ràng trong tệp .vxproj - tệp .cpp được đề cập chỉ xuất hiện một lần trong nhóm mục ClCompile và tiêu đề của nó chỉ xuất hiện một lần trong nhóm ClInclude.

Nếu điều này đổ chuông bất kỳ, hoặc nếu có ai có lời khuyên về cách tôi có thể đi về theo dõi này xuống và xử lý sự cố nó, nó sẽ được đánh giá rất nhiều!

UPDATE:

Tôi chạy msbuild /verbosity:Detailed nhưng tiếc là lời giải thích của mình cho lý do tại sao các tập tin không liên quan đang nhận được biên soạn là cũng giống như đục:

Using "CL" task from assembly "Microsoft.Build.CppTasks.Common.v110, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". 
Task "CL" 
Read Tracking Logs: 
    Debug\cl.read.1.tlog 
Output details (109 of them) were not logged for performance reasons. 
{UnrelatedFile1.cpp} will be compiled as {PROBLEM_FILE.CPP} was modified at 4/30/2013 3:28:02 PM. 
{UnrelatedFile2.cpp} will be compiled as {PROBLEM_FILE.CPP} was modified at 4/30/2013 3:28:02 PM. 
(etc...) 

Nếu điều này làm cho tinh thần để bất cứ ai cho tôi biết - có thể dường như không tìm thấy nhiều thông tin về các hoạt động bên trong của tác vụ CL hoặc lý do tại sao nó sẽ nhìn thấy một sự phụ thuộc giữa các tệp CPP không liên quan này.

+0

cập nhật câu trả lời của tôi cho chỉnh sửa của bạn, hy vọng nó sẽ giúp! – paulm

+0

Cảm ơn - chưa có cơ hội thử nó, kinda đã từ bỏ nó vào một ngày khác - nhưng sẽ sớm bị đâm vào nó. Đừng nghĩ rằng đó là một chuỗi tiêu đề - tôi đã tìm kiếm mọi tệp trong giải pháp (thậm chí là nhị phân) cho tên tệp vi phạm, không có tham chiếu nào mà tôi chưa biết. – QuadrupleA

+0

Cũng có thể là một vấn đề tiêu đề biên dịch sẵn, tùy thuộc vào những gì được bao gồm ở đâu. – paulm

Trả lời

1

Điều này có thể vì:

  • phần của một đơn vị tịnh tiến.
  • các dự án khác tham chiếu (các) tệp.
  • thứ gì đó (có thể là sự kiện dựng sẵn) là "chạm" các tệp để trình biên dịch cho rằng chúng đã thay đổi.

Cập nhật: * Lý do khác là nếu dự án có tệp "đã thêm" không còn trên đĩa nữa.

Để gỡ rối vấn đề này, bạn sẽ cần phải bật lên mức cao nhất ra đầu ra từ msbuild:

http://blogs.msdn.com/b/msbuild/archive/2005/09/29/475157.aspx

http://msdn.microsoft.com/en-us/library/vstudio/ms164311.aspx

Ví dụ:

msbuild /verbosity:Detailed 

Sau đó msbuild sẽ cho bạn biết lý do tại sao nó muốn xây dựng lại chúng.

Edit:

Để trả lời chỉnh sửa của bạn về tính cách rườm rà: Xem chi tiết đầu ra, bạn có thể kiểm tra các file của nó bao gồm bằng công/SHOWINCLUDES chuyển:

http://msdn.microsoft.com/en-us/library/hdkef6tk(v=vs.80).aspx

Tôi giả sử có phải là một số chuỗi tiêu đề gây ra việc xây dựng lại? Hoặc có lẽ nguyên nhân là khác, nơi trong verbosity: Log chi tiết.

+0

Tùy chọn verbosity đó là một ý tưởng hay - sẽ cho bạn một thử và xem nó có làm sáng tỏ mọi thứ không. – QuadrupleA

+0

Tìm hiểu về điều này - đã kết thúc việc đổi tên tệp thành một thứ khác, điều đó dường như đã giải quyết được sự cố. Tôi đoán tên ban đầu bị ám ảnh. Tôi sẽ đánh dấu đây là câu trả lời. – QuadrupleA

+0

Hmm tên tệp là gì? – paulm

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