Исходники в системе каталогов

Любые обсуждения, не нарушающие правил форума.

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

Исходники в системе каталогов

Сообщение dedm0zaj » 06.02.2015 22:31:39

Недавно мне пришлось скачать библиотеку Vampyre Imaging Library для работы с изображениями, которую мне советует вики фрипаскаля http://wiki.freepascal.org/OpenGL_Tutorial/ru

Вопрос в раскидывании исходников по каталогам. Почему если в корневом каталоге какой либо юнит ссылается на юнит в подкаталоге, то это явно не указывается? Т.е. к примеру в корневом каталоге есть юнит ImagingJpeg.pas, который в uses ссылается на imjpeglib. А этот imjpeglib находится не в корневом каталоге, а в подкаталоге JpegLib. Как ImagingJpeg.pas самостоятельно найдет imjpeglib? Приходится прописывать все пути всех подкаталогов для поиска исходников.

Почему нельзя этот процесс автоматизировать? Ведь можно же писать как то так:
Код: Выделить всё
uses
  imjpeglib in '/JpegLib/imjpeglib.pas';
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

Re: Исходники в системе каталогов

Сообщение alexs » 07.02.2015 00:33:27

В параметрах проекта указать папки поиска.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Исходники в системе каталогов

Сообщение dedm0zaj » 07.02.2015 09:58:11

alexs писал(а):В параметрах проекта указать папки поиска.


так я о том и говорю, что приходится прописывать пути для поиска исходников.

вопрос в том почему это не делается на уровне исходников? например:
Код: Выделить всё
uses
  imjpeglib in '/JpegLib/imjpeglib.pas';
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

Re: Исходники в системе каталогов

Сообщение Лекс Айрин » 07.02.2015 10:58:34

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

Re: Исходники в системе каталогов

Сообщение dedm0zaj » 07.02.2015 12:37:14

Лекс Айрин писал(а):dedm0zaj, потому что имена модулей, как правило, индивидуальны.


не понял объяснения. можно поподробней?

а если я скачаю биьлиотеку, в которой тысячи подкаталогов с разной вложеностью? для каждого подкаталога указывать путь в настройках проекта?
почему не делают, как в той же java, где зависимости между каталогами сделана на уровне исходников? там достаточно один раз указать библиотеку и в ней всё автоматически находится.
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

Re: Исходники в системе каталогов

Сообщение Лекс Айрин » 07.02.2015 13:31:38

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

Re: Исходники в системе каталогов

Сообщение Sharfik » 07.02.2015 14:14:34

dedm0zaj писал(а):Недавно мне пришлось скачать библиотеку Vampyre Imaging Library для работы с изображениями, которую мне советует вики фрипаскаля http://wiki.freepascal.org/OpenGL_Tutorial/ru

Вопрос в раскидывании исходников по каталогам. Почему если в корневом каталоге какой либо юнит ссылается на юнит в подкаталоге, то это явно не указывается? Т.е. к примеру в корневом каталоге есть юнит ImagingJpeg.pas, который в uses ссылается на imjpeglib. А этот imjpeglib находится не в корневом каталоге, а в подкаталоге JpegLib. Как ImagingJpeg.pas самостоятельно найдет imjpeglib? Приходится прописывать все пути всех подкаталогов для поиска исходников.

Команда добавить файлы из каталога в IDE есть, правда у меня не работает до конца. А вообще, лично мне удобнее чтобы в исходниках не было упоминаний путей, а так же чтобы без прямого указания пути поиска не добавлялись самовольно юниты, чтобы не засорять проект подключенными неиспользуемыми модулями. Я так связи отслеживаю, может не прав где то.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: Исходники в системе каталогов

Сообщение alexs » 08.02.2015 21:28:09

Кстати - правильно написанная библиотека в лазаре не требует ручного определения путей. Достаточно пакет добавить в зависимости. Или положить любой визуальный компонент из библиотеки на на форму программы (при визуальной разработке)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Исходники в системе каталогов

Сообщение qivi » 09.02.2015 12:23:23

alexs писал(а):(при визуальной разработке)

Вот именно. Я кстати то же сталкивался, когда хотел обойтись без установки библиотеки, но из за разветвлённой системы каталогов библиотеки отказывался от такого подхода.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Исходники в системе каталогов

Сообщение zub » 09.02.2015 12:27:06

Еще кстати. Есть возможность добавлять в пути проекта каталоги с подкаталогами? например добавил "/mysuperpuperlib/*/" и компилятор ищет юниты во всех подкаталогах?
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Исходники в системе каталогов

Сообщение alexs » 09.02.2015 13:31:07

qivi писал(а):Я кстати то же сталкивался, когда хотел обойтись без установки библиотеки


Мне кажется, что лучше оформить библиотеку по правилам и зарегистрировать её в IDE.
И после этого пользоваться всеми приятностями, которые будут предоставлены после этого.
А так - папка с файлами - это не библиотека - это файлопомойка.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Исходники в системе каталогов

Сообщение hinst » 09.02.2015 15:23:29

в зависимости от текущей целевой платформы в библиотеке могут браться разные пути
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Исходники в системе каталогов

Сообщение alexs » 09.02.2015 17:56:38

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

Re: Исходники в системе каталогов

Сообщение hinst » 09.02.2015 18:58:11

это делается двумя возможными путями: первый через $(TargetCPU)-$(TargetOS) в путях, они подставляются, но тогда надо чтобы в точности совпадали названия папок с названия платформ в FPC, типа i386-win32 или как-то так. Это работает без Lazarus

Вторая возможность реализуется через лазарус-пакеты, там такая фича есть, пишутся такие типа скрипты
Код: Выделить всё
// LCLWidgetType
if LCLWidgetType+''='' then begin
  if GetIDEValue('OS')=TargetOS then begin
    // use the same widgettype as the IDE
    LCLWidgetType := GetIDEValue('LCLWidgetType');
    if LCLWidgetType='nogui' then
      LCLWidgetType:='';
  end;
  if LCLWidgetType+''='' then begin
    if (TargetOS='win32') or (TargetOS='win64') then
      LCLWidgetType := 'win32'
    else if TargetOS='wince' then
      LCLWidgetType := 'wince'
    else if TargetOS='darwin' then
      LCLWidgetType := 'carbon'
    else
      LCLWidgetType:='gtk2';
  end;
end;

// widget set specific options
base := LCLWidgetType+'/';
if LCLWidgetType='gtk3' then
begin
  CustomOptions := '-dgtk3';
  UnitPath := base + 'gtk3bindings';
end else
if LCLWidgetType='gtk' then
  CustomOptions := '-dgtk1'
else if LCLWidgetType='carbon' then begin
  CustomOptions := '-dcarbon';
  UnitPath := base+'objc;'
             +base+'pascocoa/appkit;'
             +base+'pascocoa/foundation';
  IncPath := UnitPath;
end else if LCLWidgetType='cocoa' then begin
  CustomOptions := '-dcocoa';
  if TargetCPU<>'i386' then
    CustomOptions += ' -dNoCarbon';
end else if LCLWidgetType='wince' then begin
  CustomOptions := '-dDisableChecks';
end else if LCLWidgetType='fpgui' then begin
  if undefined(fpGUIPlatform) then begin
    if SrcOS='win32' then
      fpGUIPlatform := 'gdi;'
    else
      fpGUIPlatform := 'x11;';
  end;
  CustomOptions := ' -dfpgui'+fpGUIPlatform;
  UnitPath := base+'src/gui;'
             +base+'src/corelib;'
             +base+'src/corelib/'+fpGUIPlatform
             +base+'src/corelib/reportengine;';
  IncPath := UnitPath+base+'src;';
end else if LCLWidgetType='customdrawn' then begin
  UnitPath := base+'android;';
end;

// linker options
if TargetOS='darwin' then begin
  if LCLWidgetType='gtk' then
    UsageLibraryPath := '/usr/X11R6/lib;/sw/lib'
  else if LCLWidgetType='gtk2' then
    UsageLibraryPath := '/usr/X11R6/lib;/sw/lib;/sw/lib/pango-ft219/lib'
  else if LCLWidgetType='carbon' then begin
    UsageLinkerOptions := '-framework Carbon'
      +' -framework OpenGL'
      +' ''-dylib_file'' ''/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib''';
  end else if LCLWidgetType='cocoa' then
    UsageLinkerOptions := '-framework Cocoa';
end else if TargetOS='solaris' then begin
  UsageLibraryPath:='/usr/X11R6/lib';
end else if TargetOS='linux' then begin
  if (LCLWidgetType='gtk') or (LCLWidgetType='gtk2') then
    UsageLibraryPath := '/opt/gnome/lib'; // for SuSE
end;

- из пакета LCL
Такие скрипты назначают пути в лазарус-пакетах в зависимости от платформы

Добавлено спустя 34 секунды:
Ну или через дефайны-инклуды, эт третья возможность

Добавлено спустя 10 секунд:
так сказать
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Исходники в системе каталогов

Сообщение dedm0zaj » 10.02.2015 03:17:01

zub писал(а): Есть возможность добавлять в пути проекта каталоги с подкаталогами? например добавил "/mysuperpuperlib/*/" и компилятор ищет юниты во всех подкаталогах?

тоже кстати не нашел как такое сделать. в лазарусе имеется ввиду.

alexs писал(а):Мне кажется, что лучше оформить библиотеку по правилам и зарегистрировать её в IDE.
А так - папка с файлами - это не библиотека - это файлопомойка

а если допустим я юзаю geany? вики фрипаскаля называет файлопомойку "Vampyre Imaging Library" библиотекой. как быть?
dedm0zaj
постоялец
 
Сообщения: 108
Зарегистрирован: 05.10.2012 19:55:20

След.

Вернуться в Потрепаться

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

Рейтинг@Mail.ru
cron