Сборка в исходном коде или сборка из внешнего источника

10

В своей разработке (прежде всего C ++) я давно придерживался использования сборок вне исходного кода. То есть, мой источник , как правило , находится в /project/srcдиректории и строит жить в /project/build/bin/release, /project/build/bin/debugкаталоги. Я сделал это, потому что он сохраняет мои исходные каталоги чистыми от промежуточных файлов, у меня есть одно расположение для всех моих двоичных файлов, упаковка проще, очистка проще, а контроль версий проще. (Я что-то пропустил?)

Теперь я наследую (большой) проект, который использует сборки из исходного кода. Какова мотивация для этого типа структуры и каковы ее преимущества? (Меня больше всего волнуют причины инженерного уровня или типы личных предпочтений.)

Я надеялся, что «Разработка крупномасштабного программного обеспечения C ++» Лакоса взвесит это, но я пропустил это, если бы это произошло.

DIB
источник
2
Извиняюсь. Я ищу «В исходных сборках улучшить« x »» или «они помогают обеспечить« y »» или «автоматизированные тесты могут затем« z »». Не разглагольствовать. Я специально не хочу вступать в войну мнений здесь!
DIB
10
Сборки в исходном коде - это проклятие, которое вы обязаны лени вашего предшественника. Они ужасны для всего (контроль исходного кода, перекрестное построение, поиск текста и т. Д.), Но их невероятно легко создавать с использованием чистых make-файлов. Извините, это была напыщенная речь. Но объективный .
1
Что именно вы подразумеваете под сборками "in-source"? Что-то вроде /project/src/bin/releaseили действительно все промежуточные и выходные файлы в /project/src? Последний может быть действительно беспорядком, если есть более дюжины исходных файлов, с первым все в порядке.
Док Браун
2
@ Tibo, это не только невероятно легко с make-файлами, но, кажется, по умолчанию и с большинством IDE (по крайней мере, когда я проверял последние несколько лет назад).
Барт ван Инген Шенау
4
@BartvanIngenSchenau Действительно? какой IDE вы использовали, где это происходит? Qt не делает этого, на самом деле, кажется, что сборка находится как можно дальше от источника, Eclipse не делает этого, вы можете утверждать, что Clion делает это, но только как следствие main.cpp изначально находясь на верхнем уровне вашего проекта, он по-прежнему создает отдельный каталог сборки cmake вдали от вашего источника на этом верхнем уровне. Я считаю, что MSVS похожа на Клиона и в этом отношении.
августа

Ответы:

9

Спросив сообщество здесь и продолжив поиск в Интернете, я не смог найти существенного технического обоснования для использования сборок из исходного кода. (Есть много примеров причин, чтобы избежать их.)

Единственная объективная причина, которую я обнаружил (как упоминается в комментарии @BartvanIngenSchenau), заключается в том, что сборки в исходном коде иногда по умолчанию используются системой сборки. Из-за этого значения по умолчанию они не требуют затрат времени на настройку, что может быть вполне приемлемо для очень маленького (или начального) проекта.

DIB
источник