Я создаю сборки с помощью MSBuild, а конфигурации сборки настраиваются в dproj в командной строке. Немного смущает то, что размер создаваемых таким образом исполняемых файлов отличается (не намного, но все же!) От того, что производит сборка IDE. Есть идеи, почему? Я бы подумал, что используется тот же компилятор?
Почему исполняемый файл, созданный IDE Delphi 2009, отличается от исполняемого файла, созданного в командной строке?
Ответы (5)
Чтобы узнать, что делает IDE, проверьте
Инструменты | Опции | Параметры среды | Компиляция и запуск | Показать командную строку
И вы можете проверить сообщения компилятора.
Основным преимуществом сборки из компилятора командной строки Delphi является стандартизация: вы явно указываете параметры (в командной строке, в файлах .cfg и т. Д.), А компилятор следует исключительно предоставленным параметрам. . В отличие от этого, IDE имеет много других нечетких и явных поведений - например, он может искать пути к библиотекам, не указанные в параметрах проекта. Я предполагаю, что в сборке IDE что-то происходит, о чем вы не совсем осведомлены, и поэтому стандартизованные сборки выполняются из командной строки.
Первый ответ об использовании командной строки для обеспечения согласованности сборки правильный, и, вероятно, вам не о чем беспокоиться, если вы полагаетесь на систему сборки, в которой производственные файлы всегда берутся из сборок консоли.
С другой стороны, если вы действительно хотите выяснить, что происходит, вам следует включить файлы карт (с полным уровнем детализации) и сравнить / сравнить их. Если между ними есть различия, они появятся там. Любые другие различия, которые могут существовать, скорее всего, являются результатом другой опции командной строки (например, условного флага, который может быть установлен в настройках IDE).
Такое поведение существовало во всех версиях Delphi, которые я использовал. (5 - 2006). Я бы особо не беспокоился об этом. Когда я впервые обнаружил это, я потратил много времени, пытаясь устранить разницу. Я пропустил флаг компилятора? Есть ли расхождения между IDE и поддерживаемыми параметрами компилятора командной строки?
В конце концов я решил, что это не такая уж большая проблема. Оба последовательно производили функционально эквивалентные исполняемые файлы.
Если вы предоставите точно такие же параметры компилятору командной строки, созданные исполняемые файлы будут практически идентичны.
Фактически, IDE просто вызывает компилятор командной строки. Скомпилируйте свой проект в среде IDE и посмотрите на окно сообщений. вы увидите полный вызов dcc32.exe ...