2009-05-11 11 views
26

Od momentu rozpoczęcia pracy w nowej firmie zauważyłem, że używają one plików cpp dla większości naszego rozwiązania i zastanawiałem się, czy ktoś jest w stanie podać mi ostateczny powód, dlaczego i jak przyspieszają proces kompilacji. ? Wydaje mi się, że edycja jednego pliku cpp w plikach jedności wymusi ponowną kompilację wszystkich plików.Korzyści/wady budowania jedności?

+4

Pamiętaj, że kompilacja jedności zmienia semantykę, ponieważ jest wiele rzeczy, które zależą od ograniczeń jednostki tłumaczeniowej. –

Odpowiedz

26

Bardzo podobne odpowiedzi pytanie i dobre tutaj: #include all .cpp files into a single compilation unit?

Podsumowanie Wydaje się, że mniej I/O koszt jest główną zaletą.

Zobacz także The Magic Of Unity Builds jako powiązane również w powyższym pytaniu.

+0

Doskonała odpowiedź, bardzo dziękuję za pomoc, po przeczytaniu tych linków jeszcze im nie mądrzejszy, jeśli edytowanie plików w jednostce cpp wymusza kompletną rekompilację całego źródła, jakieś pomysły na ten temat? – Stowelly

+0

Tak, to by było. To, czy to źle, zależy od tego, jak często trzeba już wykonać pełną odbudowę. –

+2

Jeśli zmieni się jeden plik, przyzwoity system kompilacji zauważy zmienioną zależność i przekompiluje partię. Być może uda Ci się złagodzić niektóre z tego czasu dzięki pamięci podręcznej kompilatora, takiej jak doskonały ccache - patrz http://ccache.samba.org/ – akent

6

Lee Winder napisali swoje doświadczenia z Unity wybudowany - The Evils of Unity Builds

Jego konkluzja brzmi:

Jedność buduje. Nie lubię ich.

+0

Bardzo przydatny artykuł. Ostatnio zauważyłem, że wprowadzenie kilku zmian w plikach w wielu projektach w ramach rozwiązania może zająć nawet pół godziny (nawet w przypadku systemu incredibuild), ale rozwiązanie do czyszczenia i budowanie od zera trwa około 5 minut, więc z pewnością jest wiele ważnych wskazuje tam! – Stowelly

+1

Link można teraz znaleźć [tutaj] (http://engineering-game-dev.com/2009/12/15/the-evils-of-unity-builds/). – imallett

+0

@imallett Ten link również jest uszkodzony. – glauxosdever

2

Dzieje się tak, ponieważ oszczędza on nadmiar pracy. Nadmiarowe analizowanie i kompilacja zależności. Łączenie jest również o wiele bardziej skomplikowane - albo eksportujesz wszystko do jednego obiektu (albo kilku) albo oddzielny nadmiarowy eksport do większości plików obiektów celu. Mniej obiektów powoduje mniej wejść/wyjść i skrócone czasy połączeń. W zależności od konfiguracji włączenie może być problemem - w używanym przeze mnie systemie "budowa jedności", budowanie to ostatecznie procesor i/lub pamięć.

Powiązane problemy