Пакет (BPL) Автоматический суффикс именования - PullRequest
16 голосов
/ 09 января 2012

Я пишу множество компонентов и библиотек для Delphi, большинство из которых требуют использования BPL Packaging, чтобы их можно было установить в IDE.

Это достаточно просто и хорошо работает, вплоть до тех пор, пока вы не захотите поддерживать единый набор файлов проектов пакетов (в одной группе проектов), но также захотите скомпилировать и распространить эти же пакеты для разных версий Delphi.

До сих пор я создавал разные проекты пакетов для каждой версии Delphi и явно определял идентификатор версии Delphi в качестве суффикса (например, Kinect_XE.bpl и Kinect_XE2.bpl ).

Мне известно, что в Параметры проекта для проекта пакета в разделе Описание есть поля Префикс LIB и (что более важно для моего необходимо) суффикс LIB .

Мне также известно, что если я добавлю значение в суффикс LIB , оно будет добавлено в конец имени файла скомпилированного BPL.

Однако, во-первых, у меня вопрос: возможно ли, чтобы среда IDE автоматически заполнила поле LIB Суффикс номером IDE / RTL Version , и если да, то ... как?

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

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

Я подозреваю, что мне может понадобиться ввести значение, например $ (VER) (или что-то подобное), в поле LIB Суффикс , но это не работает, и я Мы искали Google в поисках правильного решения.

Надеюсь, вы можете помочь!

ОБНОВЛЕНИЕ 1

Сейчас я пишу плагин IDE, который будет использоваться с ( в крайнем случае ) Delphi 2007 для XE2, который дает проектам DLL и BPL новую опцию под названием AutoSuffix . При переключении On любая IDE с установленным плагином AutoSuffix немедленно применяет правильный суффикс версии IDE к проекту.

Плагин AutoSuffix будет доступен (бесплатно) для всех в течение следующих 24 часов, и этот вопрос будет соответствующим образом обновлен.

ОБНОВЛЕНИЕ 2

Хорошо ... Delphi 2007 - это боль! До сих пор я работал с AutoSuffix с 2009 до XE2, но 2007 требует немного больше времени (терпение приветствуется).

ОБНОВЛЕНИЕ 3

Казалось бы, Embarcadero услышал наш коллективный призыв к упрощению объединения пакетов между версиями.

Марк собирается продвинуть это до конца, чтобы увидеть, смогут ли будущие версии Delphi использовать функцию {$ LIBSUFFIX AUTO} . Я надеюсь услышать очень скоро, будет ли это так. Если это так, это определенно влияет на то, как AutoSuffix потребуется для работы на XE2 и более старых версиях (поскольку в настоящее время он не предоставляет простой переключатель AUTO .. ​​у него есть свой собственный метод).

Теперь я надеюсь, что EMB серьезно отнесется к этому запросу, предоставив его в качестве неотъемлемой функции в будущем, чтобы он стал простым примером использования AutoSuffix в существующих версиях для унификации процесса во всех версиях. !

Ответы [ 3 ]

7 голосов
/ 09 января 2012

AFAIK для Delphi до XE2 для этого нет автоматов.

Относительно требуется условие : когда вы require другой пакет, вы фактически используете dcp, который не наследует LIBSUFFIX.Таким образом, достаточно потребовать VCL.dcp во время компиляции, тогда как VCL160.bpl фактически используется во время выполнения.DCP включает полное имя BPL, чтобы решить эту проблему.

Это делает подход LIBSUFFIX превосходящим простое «переименование пакета для каждой версии Delphi».

Решение, подобное предложенному в QC83229 упростит перенос пакета на более новую версию Delphi, но тогда вы по-прежнему будете зависеть от файлов dproj, которые не имеют обратной совместимости.

Обычно я использую разные папки для каждого Delphiверсия, где хранятся только файлы проекта.Для новой версии Delphi мне нужно только скопировать папку и изменить LIBSUFFIX.

3 голосов
/ 09 января 2012
Директива

LIBSUFFIX находится в файле * .dpk, и вы можете редактировать файл * .dpk вручную.

Вы можете написать, например,

{$IFDEF CONDITIONALEXPRESSIONS}
   {$IF CompilerVersion = 20.0}
{$LIBSUFFIX '120'}
   {$IFEND}
   {$IF CompilerVersion = 21.0}
{$LIBSUFFIX '140'}
   {$IFEND}
{$ENDIF}

Плохо то, чтоIDE не уважает ваши ручные изменения файла * .dpk и удаляет их, после чего вы вносите изменения в пакет.Вот почему некоторые поставщики компонентов, использующие условные определения в файле * .dpk, говорят в инструкции по установке, если их просят сохранить изменения, говорят «НЕТ».

2 голосов
/ 20 мая 2012

Мое предложение состояло бы в том, чтобы добавить это как настраиваемую опцию в наборы опций проекта (см. QC # 86491 .) Вместо обновления всех пакетов было бы достаточно обновить один файл набора опций.

На самом деле, кажется, тег DllSuffix распознается файлами набора опций в Delphi XE / XE2. Добавление <DllSuffix>160</DllSuffix> в раздел <PropertyGroup> файла набора параметров приведет к добавлению суффикса к пакету в менеджере проектов. Однако вам все равно нужно открыть параметры проекта и нажать «ОК», чтобы сохранить его в файле .dpk.

Я согласен, что было бы чрезвычайно полезно с этой функцией (я думаю, что и для пакетов в RTL.)

...