In-Source Build vs. Out-Of-Source Build

10

Dalam pengembangan (terutama C ++) saya, saya telah lama berpegang pada penggunaan build out-of-source. Artinya, sumber saya biasanya duduk di /project/srcdirektori dan membangun hidup dalam /project/build/bin/release, /project/build/bin/debugdirektori. Saya telah melakukan ini karena menjaga direktori sumber saya bersih dari file perantara, saya punya satu lokasi untuk semua binari saya, pengemasan lebih mudah, pembersihan lebih mudah, dan kontrol versi lebih mudah. (Apakah saya melewatkan sesuatu?)

Saya mewarisi proyek (besar) sekarang yang menggunakan build in-source. Apa motivasi untuk jenis struktur ini dan apa kelebihannya? (Saya paling peduli dengan alasan tingkat teknik vs. jenis alasan preferensi pribadi.)

Saya berharap Lakos '"Skala Besar C + + Desain Perangkat Lunak" akan membebani itu, tapi saya melewatkannya jika itu terjadi.

DiB
sumber
2
Permintaan maaf. Saya mencari "In source builds memperbaiki 'x'" atau "mereka membantu memastikan 'y'" atau "tes otomatis dapat 'z'". Bukan kata-kata kasar. Saya secara khusus tidak ingin terlibat dalam perang pendapat di sini!
DiB
10
In-source builds adalah kutukan yang harus Anda bayar atas kemalasan pendahulu Anda. Mereka mengerikan untuk semua hal (kontrol sumber, pembangunan silang, pencarian teks, dll.) Tetapi sangat mudah dibuat menggunakan makefile kosong. Maaf, ini kata-kata kasar. Tapi yang objektif .
1
Apa sebenarnya yang Anda maksud dengan build "in-source"? Sesuatu seperti /project/src/bin/release, atau benar-benar semua file antara dan keluaran /project/src? Yang terakhir ini memang bisa berantakan jika ada lebih dari selusin file sumber, yang pertama ok.
Doc Brown
2
@ Tibo, ini tidak hanya sangat mudah dengan makefiles, tetapi juga tampaknya menjadi default pada sebagian besar IDE (setidaknya ketika saya periksa bertahan beberapa tahun yang lalu).
Bart van Ingen Schenau
4
@ BartartIngenSchenau Benarkah? IDE apa yang telah Anda gunakan di mana ini terjadi? Qt tidak melakukan ini, pada kenyataannya tampaknya menempatkan build sejauh mungkin dari sumbernya, Eclipse tidak melakukan ini, Anda mungkin berpendapat bahwa Clion melakukan hal ini, tetapi hanya sebagai konsekuensi dari main.cpp awalnya berada di tingkat atas proyek Anda, itu masih membuat direktori build cmake terpisah dari sumber Anda di tingkat atas itu. Saya percaya MSVS juga mirip dengan Clion dalam hal ini.
whn

Jawaban:

9

Setelah bertanya kepada komunitas di sini dan melanjutkan pencarian saya secara online, saya belum dapat menemukan justifikasi teknis yang signifikan untuk menggunakan in-source build. (Ada banyak contoh alasan untuk menghindarinya.)

Satu-satunya alasan obyektif yang saya temukan (seperti yang disinggung dalam komentar oleh @BartvanIngenSchenau) adalah bahwa in-source build kadang-kadang gagal oleh sistem build. Karena standar ini, mereka tidak memerlukan overhead dalam waktu setup, yang mungkin dapat diterima untuk proyek yang sangat kecil (atau awal).

DiB
sumber