2009-05-11 35 views
26

Kể từ khi bắt đầu tại một công ty mới, tôi nhận thấy rằng họ sử dụng các tệp cpp thống nhất cho phần lớn giải pháp của chúng tôi và tôi đã tự hỏi liệu có ai có thể cho tôi lý do chính xác không? ? Tôi đã nghĩ rằng việc chỉnh sửa một tệp cpp trong các tệp thống nhất sẽ buộc biên dịch lại tất cả chúng.Những lợi ích/bất lợi của sự hợp nhất được xây dựng?

+4

Hãy nhớ rằng bản dựng kết hợp sẽ thay đổi ngữ nghĩa, vì có rất nhiều thứ phụ thuộc vào giới hạn của đơn vị dịch thuật. –

Trả lời

26

Rất tương tự câu hỏi và câu trả lời tốt ở đây: #include all .cpp files into a single compilation unit?

Bản tóm tắt có vẻ là có ít I/O trên cao là lợi ích lớn.

Xem thêm The Magic Of Unity Builds cũng như được liên kết trong câu hỏi trên.

+0

câu trả lời tuyệt vời, cảm ơn rất nhiều sự giúp đỡ của bạn, sau khi đọc những liên kết im vẫn không khôn ngoan hơn nếu chỉnh sửa các tập tin trong cpp đơn vị lực lượng một biên dịch hoàn toàn của toàn bộ nguồn, bất kỳ ý tưởng về điều này? – Stowelly

+0

Có, nó sẽ. Cho dù đó là một điều xấu hay không phụ thuộc vào mức độ thường xuyên bạn phải làm một xây dựng lại đầy đủ rồi. –

+2

Nếu một tệp thay đổi, bất kỳ hệ thống xây dựng phong nha nào sẽ nhận thấy sự phụ thuộc đã thay đổi và biên dịch lại rất nhiều. Bạn có thể giảm thiểu một số thời gian đó với bộ nhớ cache của trình biên dịch như ccache tuyệt vời - xem http://ccache.samba.org/ – akent

6

Lee Winder posted kinh nghiệm của mình với Unity xây dựng - The Evils of Unity Builds

Kết luận của ông là:

Unity xây dựng. Tôi không thích chúng.

+0

Bài viết rất hữu ích. Gần đây tôi đã nhận thấy rằng việc thực hiện một số thay đổi đối với các tệp trên nhiều dự án trong giải pháp có thể mất tới nửa giờ để xây dựng (ngay cả với khả năng hoài nghi) nhưng giải pháp làm sạch và xây dựng từ đầu mất khoảng 5 phút, vì vậy chắc chắn là rất hợp lệ điểm đó! – Stowelly

+1

Liên kết bây giờ có thể được tìm thấy [ở đây] (http://engineering-game-dev.com/2009/12/15/the-evils-of-unity-builds/). – imallett

+0

@imallett Liên kết cũng bị hỏng. – glauxosdever

2

Đó là vì nó giúp tiết kiệm công việc thừa. Phân tích và biên dịch dự phòng cho các phụ thuộc. Liên kết cũng phức tạp hơn nhiều - bạn có thể xuất tất cả trong một đối tượng (hoặc một vài) hoặc xuất riêng biệt dư thừa trên hầu hết các tệp đối tượng của mục tiêu. Ít đối tượng hơn dẫn đến ít I/O hơn và giảm thời gian liên kết. Tùy thuộc vào thiết lập của bạn, việc đưa vào có thể là một vấn đề - trên hệ thống "xây dựng sự thống nhất" mà tôi sử dụng, việc xây dựng cuối cùng là CPU và/hoặc bộ nhớ bị ràng buộc.

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