LPK: совпадения имен файлов.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

LPK: совпадения имен файлов.

Сообщение iN0k » 04.05.2016 11:23:23

Ситуация: Есть два пакета A.lpk, B.lpk.
В каждом из них присутствует файл my_pkg_unit.pas (для каждого пакета он разный, только имена совпадают).

При попытке установить ОБА пакета ОДНОВРЕМЕННО выплывает ошибка типа:
"There are two units with the same name ... my_pkg_unit.pas ...".
Вообще говоря логично ...

вопрос: возможно ли разрулить ситуацию БЕЗ создания (переименования) файлов my_pkg_unit_A.pas, my_pkg_unit_B.pas ...
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: LPK: совпадения имен файлов.

Сообщение alexs » 04.05.2016 12:13:16

А зависимости не помогают? Добавить пакет А в зависимости к пакету B.
И тогда файл будет только в А. А второй пакет его увидит.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LPK: совпадения имен файлов.

Сообщение iN0k » 04.05.2016 12:23:03

не ... зависимостей нет ... это просто разные файлы с одинаковым названием

имелось в виду ...
в каждом пакете есть файл register.pas ...

вот, наверное с таким именем понятнее будет )
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: LPK: совпадения имен файлов.

Сообщение resident » 04.05.2016 12:27:11

А так не прокатит?
viewtopic.php?f=5&t=11083#p97181
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: LPK: совпадения имен файлов.

Сообщение Лекс Айрин » 04.05.2016 12:31:34

Можно попробовать использовать вариант с указанием пути для каждого конфликтного модуля.
Код: Выделить всё
uses
  Windows, Messages, SysUtils,
  Strings in 'C:\Classes\Strings.pas', Classes;

взято отсюда http://pascal-study.blogspot.ru/2011/03 ... st_18.html
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: LPK: совпадения имен файлов.

Сообщение iN0k » 04.05.2016 12:34:03

тоже думаю в эту сторону ... теоретически должно помогать,
но lazarus АВТОМАТИЧЕСКИМ пересоздает файлы A.lpk и B.lpk

Добавлено спустя 2 минуты 12 секунд:
поправка... фалы "Package Source"
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: LPK: совпадения имен файлов.

Сообщение iN0k » 05.05.2016 14:06:20

alexs писал(а):А зависимости не помогают?

хорошо ... допустим я сделал следующее:

A.lpk и B.lpk зависят от C.lpk,
НО C.lpk должен быть скомпилирован с РАЗНЫМИ параметрами для каждого пакета (A и B) ...

такое возможно? :oops:
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: LPK: совпадения имен файлов.

Сообщение zub » 05.05.2016 14:39:01

Зависимости и вообще uses подразумевает использование одного и того же скомпиленого кода С в А и B.
Тут вам хочется немного странного... оформите С.pas в виде инклуда в пакете С, с соответствующей настройкой путей (в пакете С) включите его в A и B - получятся 2 разные копии скомпиленые с разными параметрами из пакетов A и B
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: LPK: совпадения имен файлов.

Сообщение iN0k » 05.05.2016 15:10:34

zub писал(а):Тут вам хочется немного странного...

видимо да ...
zub писал(а):в виде инклуда

уже и в эту сторону смотрю ... но как инклюдить форму? которая с ресурсами ... по идее она простая и можно реалТайм нарисовать ...
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: LPK: совпадения имен файлов.

Сообщение zub » 05.05.2016 16:45:06

>>которая с ресурсами ...
при желании всё можно, например макросами переименовать при инклуде
Но всеравно чтото тут не так и должны быть более "человечные" пути, в смысле сама задумка вкорни неправильная
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: LPK: совпадения имен файлов.

Сообщение iN0k » 05.05.2016 19:34:35

zub писал(а):в смысле сама задумка вкорни неправильная

хм ... возможно ...

тогда опишу свою идею-преблему полностью:
есть компонент wndInspector_FF8S
в его структуре каталогов присутствует папка \srcEXT\ в которую я сваливаю "узко"-специализированные unit`ы, на основе (или с использованием) которых я пишу код компонента.

Теперь стоит задача создать еще один компонент, в котором можно (нужно) повторно использовать код этих "узко"-специализированных unit`ов, но возможно скомпилированных с другими параметрами.

план был такой: в новом компоненте создаю аналогичную папку \srcEXT\, Git`ом затягиваю туда "узко"-специализированные unit`ы ...

однако, фокус не удался ...

выход:
1. реальный копи-паст, однако это полная опа, я замучался править ошибки в двух местах
2. копи-паст через инклюде ... (видимо буду пробовать так)

ну или мне кто-нибудь подскажет цивилизованный способ :-)
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: LPK: совпадения имен файлов.

Сообщение Лекс Айрин » 05.05.2016 19:38:50

Судя по всему, надо просто правильно составить дерево наследования компонентов/объектов.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: LPK: совпадения имен файлов.

Сообщение zub » 05.05.2016 20:05:27

>>ну или мне кто-нибудь подскажет цивилизованный способ :-)
Более цивилизованый способ - использовать повторно по нормальному))
Описание проблемы света не пролило. что за нужда использовать разные "параметры компиляции" в одном бинарнике? и что это за разные параметры?

Вангую что вам нужны генерики. но при чем здесь формы? другого разумного объяснения не вижу
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: LPK: совпадения имен файлов.

Сообщение resident » 05.05.2016 23:24:16

iN0k писал(а):в котором можно (нужно) повторно использовать код этих "узко"-специализированных unit`ов, но возможно скомпилированных с другими параметрами.

О каких параметрах речь? Условная компиляция не катит?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: LPK: совпадения имен файлов.

Сообщение iN0k » 06.05.2016 10:06:09

resident писал(а):О каких параметрах речь? Условная компиляция не катит?


условная компиляция ... да она там постоянно :-( ...

ок, смотрите ... есть "библиотека" SourceEditor-onActivate, она в зависимости от "параметра компиляции" {$define in0k_lazIdeSRC_SourceEditor_onActivate___inFocusONLY} ведет себя по разному.

Есть компонент wndInspector_FF8S(A.lpk) в котором эта библиотека нужна БЕЗ параметра и другой компонент (B.lpk) в котором эта библиотека нужна с параметром ...

Варианты:
1. "параметр компиляци" {$define in0k_lazIdeSRC_SourceEditor_onActivate___inFocusONLY} перевести в реалТайм и оформить "библиотеку" SourceEditor-onActivate как пакет С.lpk.
Тогда, пакеты A.lpk и B.lpk в разделе Required будут иметь ссылку на С.lpk, настраивать поведение "библиотеки" в реал тайме ... и типа все должно работать. Но у этого варианта есть минус (для меня он достаточно большой). Целевые пакеты A.lpk и B.lpk теряют "атомарность". Т.е. получив исходники пакетов A.lpk или B.lpk придется сначала искать и устанавливать пакет С.lpk. Вероятно, на данный момент, это самый правильный вариант, но мне он почему-то не нравится ...

поэтому ...
2. Ручной копи-Паст, т.е. в пакете A.lpk есть юнит UnitA.pas, в B.lpk юнит UnitB.pas. Содержимое этих юнитов ОДИНАКОВО, но за счет условной компиляции юниты "ведут" себя по разному. Неудобство в том, что исправив ошибку в одном из них, мне приходится руками копировать изменения в другой. И эта ручная синхронизация утомляет, повозившись с двумя и поняв что тоже самое теперь надо делать для трех ...

я решил попробовать следующее ...
3. Пусть теперь есть единственный UnitС.pas, он средствами Git подМодуля подтягивается к исходникам пакетов A.lpk и B.lpk. Из плюсов: "атомарность" пакета, единый источник. Но, МЕГА касяк, я не смог установить одновременно ОБА пакета (файл UnitС.pas присутствует одновременно в двух пакетах, на что Lazarus ругается плюется и не работает). Однако, по отдельности, пакеты работают именно так как я и задумывал ...

ну и теперь ... дурацкая идея
3.а. UnitС.pas превращаем в UnitС.inc, в каждом пакете снова создаем соответствующие юниты UnitА.pas и UnitВ.pas, в которых пишем {$i UnitС.inc} ... но что-то мне подсказывает что это гемор еще тот ... или я опять столкнусь с косяком из пункта 3.

ну и теперь получается: либо мои идеи и желания слишком "странные", или я чего-то не понимаю ...
потому и жажду получить дельный совет от сообщества :-)
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 240

Рейтинг@Mail.ru