Delphi XE2: Какова цель директивы IMPLICITBUILDING, найденной в пакете - PullRequest
8 голосов
/ 15 сентября 2011

Когда я пытаюсь создать новый пакет в Delphi XE2, в исходном файле пакета dpk появляется новая конструкция: IMPLICITBUILDING

Для чего это нужно?

package Package1;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}

requires
  rtl;

end.

Ответы [ 2 ]

3 голосов
/ 10 января 2015

Пожалуйста, также посмотрите это обсуждение: Почему Delphi изменяет исходный файл dpk Indy, когда я изменяю параметры проекта и this .

"Директивы компилятора, которые появляются между$ IFDEF IMPLICITBUILDING и $ ENDIF обычно передаются компилятором в качестве параметров при явной компиляции пакета, поскольку эти параметры изменяются в зависимости от конфигурации (отладка / выпуск) и целевой платформы (Win32, Win64, OSX32), их статически проблематичноопределяется в источнике проекта пакета. При определении в источнике проекта они всегда будут переопределять параметры, передаваемые компилятором. $ IFDEF предотвращает использование этих параметров во время явной компиляции.

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

Как правило, лучше отключить неявныйздание оn пакеты и скомпилируйте их явно через сборку группы проекта или через зависимости проекта.Если вы строите только для одной платформы, используя единственную конфигурацию, то неявный механизм построения адекватен.

IMPLICITBUILDING определяется компилятором во время компиляции пакета, который неявно компилируется как часть компиляциичто-то, что зависит от этого.Как указано в комментарии, вы не должны пытаться определить это значение самостоятельно "

2 голосов
/ 15 сентября 2011

I Предположим, это связано с флагом {$ IMPLICITBUILD ON} под условным блоком. Я думаю , что он установлен, пока компилятор выполняет неявную сборку (по сравнению с явной сборкой). Я понятия не имею, почему настройки следует рассматривать только в этом случае. Это, конечно, еще не задокументировано.

...