Kompilacja In-Source vs. Out-Of-Source

10

W moim rozwoju (głównie C ++) od dawna stosuję kompilacje spoza źródeł. Oznacza to, że moje źródło zazwyczaj siedzi w /project/srckatalogu i buduje żyć w /project/build/bin/release, /project/build/bin/debugkatalogi. Zrobiłem to, ponieważ utrzymuje moje katalogi źródłowe w czystości od plików pośrednich, mam jedną lokalizację dla wszystkich moich plików binarnych, pakowanie jest łatwiejsze, czyszczenie jest łatwiejsze, a kontrola wersji jest łatwiejsza. (Czy coś przegapiłem?)

Dziedziczę (duży) projekt, który korzysta z kompilacji in-source. Jaka jest motywacja do tego typu konstrukcji i jakie są jej zalety? (Najbardziej interesują mnie przyczyny techniczne i przyczyny preferencji osobistych).

Miałem nadzieję, że „Wielkoskalowe projektowanie oprogramowania C ++” Lakosa będzie w to ważyć, ale spóźniłem się, gdyby tak się stało.

DiB
źródło
2
Przeprosiny. Szukam „W kompilacjach źródłowych popraw„ x ”” lub „pomagają zapewnić, że„ y ”” lub „automatyczne testy mogą wtedy„ z ””. To żadna reguła. W szczególności nie chcę tutaj wdawać się w wojnę opinii!
DiB
10
Kompilacje źródłowe są przekleństwem, które zawdzięczasz lenistwu swojego poprzednika. Są okropne z powodu wszystkiego (kontrola źródła, kompilacja, wyszukiwanie tekstu itp.), Ale są niezwykle łatwe do utworzenia przy użyciu nagich plików makefile. Przepraszam, to był rant. Ale obiektywny .
1
Co dokładnie rozumiesz przez kompilacje „in-source”? Coś jak /project/src/bin/release, czy naprawdę wszystkie pliki pośrednie i wyjściowe /project/src? Ten ostatni może być naprawdę bałaganem, jeśli istnieje więcej niż tuzin plików źródłowych, pierwszy jest w porządku.
Doc Brown
2
@ Tibo, jest nie tylko niewiarygodnie łatwe w przypadku plików makefile, ale wydaje się też być domyślnym w większości IDE (przynajmniej kiedy sprawdzałem to kilka lat temu).
Bart van Ingen Schenau
4
@BartvanIngenSchenau Naprawdę? jakiego IDE używałeś w tym przypadku? Qt tego nie robi, w rzeczywistości wydaje się, że umieszcza kompilację jak najdalej od źródła, Eclipse tego nie robi. Możesz argumentować, że Clion to robi, ale tylko w wyniku main.cpp początkowo znajdujący się na najwyższym poziomie projektu, nadal tworzy osobny katalog budowania cmake z dala od źródła na tym najwyższym poziomie. Uważam, że pod tym względem MSVS jest podobny do Cliona.
kiedy

Odpowiedzi:

9

Po zapytaniu tutaj społeczności i kontynuowaniu wyszukiwania online nie znalazłem istotnego technicznego uzasadnienia dla używania kompilacji in-source. (Istnieje wiele przykładów powodów, dla których należy ich unikać).

Jedynym obiektywnym powodem, który znalazłem (jak wspomniano w komentarzu @BartvanIngenSchenau), jest to, że kompilacje źródłowe są czasami domyślnie instalowane przez system kompilacji. Z powodu tego ustawienia domyślnego nie wymagają one narzutu w czasie instalacji, co może być całkowicie akceptowalne w przypadku bardzo małego (lub zadrapania) projektu.

DiB
źródło