2010-07-16 22 views
7

Tôi vừa mới phát hiện ra rằng bạn có thể cấu hình Visual Studio (nhưng câu hỏi này là giống nhau đối với bất kỳ trình biên dịch nào) để đổ các tệp .o trung gian vào một thư mục riêng biệt bên ngoài cây nguồn thay vì bên cạnh từng dự án riêng lẻ. Điều đó làm cho nó dễ dàng để làm sạch các dự án lên đến lưu trữ để zip hoặc một cái gì đó dọc theo những dòng.Tại sao "hết nguồn" xây dựng không phải là mặc định?

Tại sao loại cấu hình đó không phổ biến hơn? Có bất kỳ nhược điểm đáng kể nào không?

+2

không chắc lý do tại sao nó không phải là mặc định, nhưng bạn nói đúng Bạn nên viết một bảng thuộc tính cho fi x này có lẽ là sự thay đổi tốt nhất mà tôi từng thực hiện cho công việc VS của mình. – jalf

Trả lời

2

Đây là mặc định trong Visual Studio và đã có thời gian khá lâu (ít nhất là ngược lại với VC++ 6). Thư mục trung gian mặc định giống với thư mục đầu ra, không phải thư mục nguồn. Điều này có nghĩa rằng tất cả các tệp đối tượng được đặt cùng với đầu ra cuối cùng.

Trong thực tế, nó yêu cầu một số jiggery-pokery nếu bạn đang làm việc với các dự án mong đợi đầu ra trình biên dịch được đặt cùng với tệp nguồn. Vì VC++ mặc định cho các tệp đối tượng cùng tên với tệp nguồn tương ứng của chúng (nhưng với phần mở rộng khác), nếu bạn có nhiều tệp nguồn có cùng tên (nhưng các đường dẫn khác nhau), thì việc biên dịch từng tệp nguồn sẽ ghi đè lên đối tượng tương ứng tập tin. Tập tin cuối cùng sẽ được biên dịch "thắng".

Điều này, tự nhiên, phá vỡ bản dựng.

Yêu cầu tên tệp nguồn là duy nhất toàn cầu trên một dự án thực sự khá khó chịu. Bạn có thể thay đổi vị trí đầu ra sao cho nó bao gồm một đường dẫn; mối liên kết vẫn làm điều đúng.

+0

Huh? Theo mặc định, nó tạo ra một thư mục con Debug/Release trong thư mục dự án, chứa tất cả các tệp trung gian. Nó chắc chắn không đặt "tất cả các tập tin đối tượng cùng với đầu ra cuối cùng". Không phải những gì tôi gọi là "hết nguồn". – jalf

+0

Vâng, nhưng nó không đặt chúng cùng với các tệp nguồn, nhưng trong một thư mục con. –

+0

Bạn giải quyết kịch bản "thắng cuối cùng" bằng cách thực hiện một '$ (SolutionDir) \ Build \ $ (ProjectName) \ $ (PlatformToolset) \ $ (Nền tảng) \ $ (Cấu hình)' cho 'IntDir'. –

1

Đây có thể là câu hỏi có câu trả lời lịch sử. Các trình biên dịch C đầu tiên (và do đó các trình biên dịch C++ đầu tiên) được viết trên và cho Unix. Không có nơi 'chuẩn' cho nhiều thứ trong unix, chỉ với một vài ngoại lệ. Như vậy, thực hành bình thường là chỉ cần đặt tất cả mọi thứ trong thư mục làm việc hiện tại, trừ khi được hướng dẫn khác.

+3

Visual Studio không xuất các tệp đối tượng trong thư mục làm việc hiện tại, mặc dù nó đổ chúng vào các thư mục được tạo trong mỗi dự án; câu hỏi là tại sao nó không chỉ nhóm chúng theo giải pháp. Cộng với Microsoft không phải là chính xác nổi tiếng để làm những việc một cách nhất định bởi vì nó lịch sử như thế nào những người khác đã làm nó –

+0

Nhóm chúng theo giải pháp thực sự sẽ làm cho vấn đề mô tả trong câu hỏi (của tên xung đột) tồi tệ hơn nhiều. Phải thừa nhận rằng tôi đã không bao giờ nhìn thấy xung đột tên tập tin trong một dự án duy nhất (nghiêm túc, tại sao ??), nhưng qua các dự án - có thể được duy trì bởi những người khác nhau - trong một giải pháp duy nhất, đó là hoàn toàn có thể. –

+0

@Pavel: Tại sao điều đó lại làm cho vấn đề tồi tệ hơn?Đặt các tập tin obj trong '$ (SolutionDir) \ obj \ $ (ProjectName)' hoặc một cái gì đó như thế và chúng sẽ không xung đột giữa các dự án, trong khi vẫn ở bên ngoài cây nguồn. (Ngoài ra, OP đã hỏi gì về vụ đụng độ tên?) – jalf

0

Nếu bạn sử dụng Qt Creator làm IDE phát triển của mình thì phiên bản 2 bây giờ cho phép 'tạo bóng' theo mặc định hoạt động chính xác theo cách bạn mô tả và thực sự hữu ích. Nó cũng là một hộp kiểm duy nhất để bật hoặc tắt nó, điều này hơi phức tạp hơn so với VS.

1

Tôi sẽ đi với "vì VS được phát triển trong chân không, nơi các ý tưởng từ thế giới bên ngoài thường không xâm phạm. Việc sắp xếp các tệp xây dựng theo cách này hoạt động được chấp nhận trong các phiên bản đầu tiên của Visual Studio (hoặc tiền thân không phải của Studio) và vì đó là cách luôn được thực hiện trong nhà và không ai đến từ bên ngoài và nói "bạn biết đấy, phần còn lại của thế giới thực sự muốn tách các tệp rác trung gian và thực tế của họ mã nguồn", nhóm nghiên cứu VS không bao giờ hình dung nó là một vấn đề.

nó chỉ là một phỏng đoán, nhưng tôi không thể nghĩ ra một lời giải thích tốt hơn.

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