2009-05-22 2 views
9

Я создаю сборки с использованием MSBuild и строю конфигурации, настроенные в dproj в командной строке. Это немного обескураживает то, что размер исполняемых файлов, созданных таким образом, отличается (но не намного, но все же!) Тем, что создает сборка IDE. Любые идеи почему? Я бы подумал, что используется тот же компилятор?Почему исполняемый файл Delphi 2009 IDE отличается от исполняемого файла, созданного в командной строке?

ответ

8

Чтобы посмотреть, что такое IDE, проверьте

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

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

10

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

0

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

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

0

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

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

+1

Как это может помочь OP на самом деле сделать это, хотя? –

+0

Он помогает в том, что вы можете убедиться, что/можете/управлять вашим инструментом сборки (Стив упомянул MSBuild в своем вопросе), чтобы скомпилировать * точно * так же, как и с IDE Delphi. –

3

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

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

+0

+1 для рекомендации файла карты. Кажется, у них сейчас гораздо меньше внимания, но они все еще очень важны для понимания того, что на самом деле используется приложением. – skamradt

Смежные вопросы