Почему исполняемый файл, созданный IDE Delphi 2009, отличается от исполняемого файла, созданного в командной строке?

Я создаю сборки с помощью MSBuild, а конфигурации сборки настраиваются в dproj в командной строке. Немного смущает то, что размер создаваемых таким образом исполняемых файлов отличается (не намного, но все же!) От того, что производит сборка IDE. Есть идеи, почему? Я бы подумал, что используется тот же компилятор?


person Steve    schedule 22.05.2009    source источник


Ответы (5)


Чтобы узнать, что делает IDE, проверьте

Инструменты | Опции | Параметры среды | Компиляция и запуск | Показать командную строку

И вы можете проверить сообщения компилятора.

person Cesar Romero    schedule 22.05.2009

Основным преимуществом сборки из компилятора командной строки Delphi является стандартизация: вы явно указываете параметры (в командной строке, в файлах .cfg и т. Д.), А компилятор следует исключительно предоставленным параметрам. . В отличие от этого, IDE имеет много других нечетких и явных поведений - например, он может искать пути к библиотекам, не указанные в параметрах проекта. Я предполагаю, что в сборке IDE что-то происходит, о чем вы не совсем осведомлены, и поэтому стандартизованные сборки выполняются из командной строки.

person Argalatyr    schedule 22.05.2009

Первый ответ об использовании командной строки для обеспечения согласованности сборки правильный, и, вероятно, вам не о чем беспокоиться, если вы полагаетесь на систему сборки, в которой производственные файлы всегда берутся из сборок консоли.

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

person Ryan VanIderstine    schedule 22.05.2009
comment
+1 за рекомендацию файла карты. В наши дни кажется, что им уделяется гораздо меньше внимания, но они по-прежнему очень важны для понимания того, что на самом деле используется приложением. - person skamradt; 23.05.2009

Такое поведение существовало во всех версиях Delphi, которые я использовал. (5 - 2006). Я бы особо не беспокоился об этом. Когда я впервые обнаружил это, я потратил много времени, пытаясь устранить разницу. Я пропустил флаг компилятора? Есть ли расхождения между IDE и поддерживаемыми параметрами компилятора командной строки?

В конце концов я решил, что это не такая уж большая проблема. Оба последовательно производили функционально эквивалентные исполняемые файлы.

person Kenneth Cochran    schedule 22.05.2009

Если вы предоставите точно такие же параметры компилятору командной строки, созданные исполняемые файлы будут практически идентичны.

Фактически, IDE просто вызывает компилятор командной строки. Скомпилируйте свой проект в среде IDE и посмотрите на окно сообщений. вы увидите полный вызов dcc32.exe ...

person Olaf Monien    schedule 22.05.2009
comment
Но как это помогает ОП на самом деле обеспечивать это снабжение? - person Matthew Flaschen; 22.05.2009
comment
Это помогает в том, что вы можете убедиться, что / может / контролировать ваш инструмент сборки (Стив упомянул MSBuild в своем вопросе) для компиляции точно так же, как вы это делаете из среды IDE Delphi. - person Olaf Monien; 11.06.2009