То, почему “из источника”, создает не значение по умолчанию?

Я просто узнал недавно, что можно настроить Visual Studio (но этим вопросом является то же для любого компилятора) вывести промежуточное звено.o файлы в отдельную папку за пределами исходного дерева, вместо вместе с каждым отдельным проектом. Это помогает очистить проект заархивировать для архивирования или что-то вдоль тех строк.

Почему такая конфигурация не более распространена? Есть ли какие-либо значительные оборотные стороны?

9
задан Billy ONeal 15 July 2010 в 15:48
поделиться

4 ответа

Это по умолчанию в Visual Studio, и так было довольно долгое время (по крайней мере, еще в VC++ 6). Промежуточный каталог по умолчанию совпадает с выходным каталогом, а не с исходным. Это означает, что все объектные файлы помещаются рядом с конечным результатом.

На самом деле, это требует некоторой подколки, если вы работаете с проектами, которые ожидают, что вывод компилятора будет размещен рядом с исходными файлами. Поскольку VC++ по умолчанию присваивает объектным файлам то же имя, что и соответствующему исходному файлу (но с другим расширением), если у вас есть несколько исходных файлов с одинаковым именем (но разными путями), то компиляция каждого исходного файла будет перезаписывать соответствующий объектный файл. Последний скомпилированный файл "побеждает".

Это, естественно, нарушает сборку.

Требование, чтобы имена исходных файлов были глобально уникальными для всего проекта, на самом деле довольно раздражает. Вы можете изменить местоположение вывода так, чтобы оно, например, включало путь; компоновщик все равно делает то, что нужно.

2
ответ дан 3 November 2019 в 07:46
поделиться

Я собираюсь пойти с «потому что VS разрабатывается в вакууме, где идеи из внешнего мира не часто вторгаются. Организация файлов сборки таким образом работала приемлемо в первых версиях Visual Studio (или ее предшественниках, не входящих в Studio), и поскольку так всегда делалось собственными силами, и никто никогда не приходил извне и не говорил: «Вы знаете, остальной мир действительно хотел бы разделить промежуточные ненужные файлы и их фактический исходный код», Команда VS никогда не думала, что это проблема.

Это всего лишь предположение, но я не могу придумать лучшего объяснения.

2
ответ дан 3 November 2019 в 07:46
поделиться

Вероятно, это вопрос с историческим ответом. Первые компиляторы C (и, следовательно, первые компиляторы C ++) были написаны для Unix и для нее.

В Unix нет «стандартного» места для чего-либо, за некоторыми исключениями. Таким образом, обычная практика - просто поместить все в текущий рабочий каталог, если не указано иное.

2
ответ дан 3 November 2019 в 07:46
поделиться

Если вы используете Qt Creator в качестве среды разработки, то версия 2 теперь по умолчанию включает «теневые сборки», что работает точно так, как вы описываете, и действительно очень полезно.

Это также единственный флажок для включения или выключения, что немного проще, чем Visual Studio.

0
ответ дан 3 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: