Вам необходимо настроить пути поиска компилятора в соответствии с параметрами вашего проекта.

ния, в которой я работаю, разрабатывает систему в Delphi, которая содержит десятки exe-модулей, и каждый из них в определенной степени идентичен, если речь идет об исходном коде. К сожалению, никто никогда не заботился об использовании библиотек для добавления общего кода. Это означает, что каждый раз, когда в коде, который разделяют все эти модули, есть исправление ошибки, программист должен вносить исправления во все из них по отдельности! Это всегда занимает так много времени ...

Я решил найти способ поместить общий код в библиотеки. Я рассмотрел DLL и BPL. В этом случае BPL казались гораздо более удобными для программиста и намного менее хлопотными, особенно в том, что код используется только в нашем программном обеспечении и только в Delphi.

Я поместил весь код, совместно используемый всеми exe-модулями, в BPL, и все выглядит нормально, но есть некоторые вещи, которые я не понимаю, и был бы благодарен, если бы вы объяснили их мне.

После разделения кода на BPL я ожидал, что будет достаточно развернуть исполняемые файлы с созданными мною BPL. Но оказалось, что им нужны также rtl100.bpl и vcl100.bpl. Почему это так? Я хочу развернуть exe и только мои BPL. Я не хочу предоставлять конечным пользователям целую кучу библиотек, поставляемых Borland и сторонними компаниями :). Я хочу, чтобы они были скомпилированы в exes, как раньше. Возможно ли это сделать?

То, что я сделал до сих пор, было:

Я поместил все общие единицы pas в BPL. Каждый BPL содержит блоки, принадлежащие к одной и той же категории, поэтому программистам понятно, какой код ожидать в данном BPL.Каждый BPL - это библиотека времени выполнения и времени разработки.Каждый BPL «перестраивается явно». Два последних являются настройками проекта по умолчанию для BPL.

И если речь идет о проектах exe:

Я удалил все единицы, которые я ранее поместил в BPL.Я установил свои BPL из меню Сервис-> Установить пакет в BDS 2006.В моих настройках exe-проекта я установил опцию «строить с пакетами времени выполнения» и перечислил все мои пакеты BPL в поле редактирования ниже (только мои пакеты, поскольку я очистил все остальные, которые там появились).

Это все, что я сделал. Проекты exe компилируются должным образом, но у меня нет доступа к исходному коду BPL (я не могу перейти к этому коду из моих проектов exe), даже если все BPL хранятся вместе с их файлами исходного кода. Почему? Это кажется странным для меня.

Я всегда склонен писать длинные описания - извините за это :). Я буду признателен за вашу помощь. Мне просто нужно несколько слов объяснения по поводу упомянутых мной моментов: развертывание exe только с моими BPL, правильность того, что я сделал в целом, и невозможность перехода к исходным кодам BPL. Заранее большое спасибо!

Спасибо всем за обсуждение. Некоторые говорили, что подход, который я выбрал, не был хорошей идеей. Наше программное обеспечение состоит из более чем 100 модулей (большинство из них являются драйверами для разных устройств). Большинство из них используют один и тот же код - в большинстве случаев это классы. Проблема в том, что эти классы не всегда помещаются в отдельные, самостоятельные единицы. Я имею в виду, что общий код часто помещается в блоки, содержащие код, специфичный для модуля. Это означает, что когда вы исправляете ошибку в совместно используемом классе, недостаточно скопировать модуль pas, в котором он определен, во все программные модули и перекомпилировать их. К сожалению, вы должны копировать и вставлять фиксированные фрагменты кода в каждый модуль, один за другим, в соответствующий модуль и класс. Это занимает много времени, и это то, что я хотел бы устранить, выбрав правильный подход - пожалуйста, помогите мне.

Я думал, что использование BPL было бы хорошим решением, но у него есть некоторые недостатки, как некоторые из вас упоминали. Худшая проблема заключается в том, что если для каждого EXE-файла требуется несколько BPL, специалистам службы технической поддержки нужно будет знать, для каких EXE-файлов нужны какие-либо BPL, а затем предоставить конечным пользователям надлежащие файлы. Пока у нас нет программы обновления программного обеспечения, это будет очень полезно как для наших технических специалистов, так и для конечного пользователя. Они наверняка заблудятся и разозлятся.

Также могут возникнуть проблемы совместимости - если один BPL используется многими EXE-файлами, модификация одного BPL может быть полезна для одного EXE-файла и плоха для некоторых других - @Warren P.

Что мне делать, чтобы исправить ошибки быстрее во многих проектах? Я думаю об одном из следующих подходов. Если у вас есть идеи получше, пожалуйста, дайте мне знать.

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

Это решение кажется приемлемым, если задний код изменен. Но у нас также есть блоки с функциями и процедурами общего назначения, которые часто не требуют изменений - мы добавляем новые функции там, где это необходимо, но в отдельных проектах. Итак, представьте, что вы пишете новую функцию в одном из 100 модулей и помещаете ее в модуль общего пользования. Через месяц или два вы модифицируете другой модуль и думаете, что вам нужна та же функция, которую вы написали 2 месяца назад. Вы должны найти модуль (это сложно, если вы не помните, какой он был) и скопировать функцию в свой код. И очевидно - единицы общего использования становятся совершенно разными в каждом модуле, если они хранятся в каждом проекте отдельно. И затем, если есть исправление ошибки ... вся история повторяется.

Создайте BPL для всего общего кода, но свяжите их с EXE-файлами, чтобы EXE-файлы были автономными.

Для меня это кажется лучшим решением сейчас, но есть несколько минусов. Если я исправлю ошибку в BPL, каждый программист должен будет обновить BPL на своем компьютере. Что если они забудут? Но все же, я думаю, что это небольшая проблема. Если мы позаботимся о том, чтобы информировать друг друга об изменениях, все должно быть хорошо.

@CodeInChaos: я не знаю, правильно ли я вас понял. Вы имеете в виду обмен файлами между проектами? Как это сделать? Мы храним исходники в SVN. Это означает, что нам придется хранить общий код в отдельной папке и заставить все проекты искать этот код там, верно? И скачать из SVN проект и все папки, от которых он зависит ...

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

Большое спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос