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

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

Ответы [ 5 ]

10 голосов
/ 22 мая 2009

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

8 голосов
/ 22 мая 2009

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

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

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

3 голосов
/ 22 мая 2009

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

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

0 голосов
/ 22 мая 2009

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

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

0 голосов
/ 22 мая 2009

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

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

...