>>В директории, где лежит uzbmemman.pas есть директория zengine/ и там исходники пакета?
нет.
он входит в пакет zebase и лежит в E:zcadcad_sourcecomponentszebaseuzbmemman.pas
а zengine это исходники проекта, не пакет, E:zcadcad_sourcezenginezgluzglgeomdata.pas
Попробовал - да, пути преобразуются в относительные, даже если задать их абсолютно. Преобразуются относительно папки где запущен fpc, обычно это папка с главным файлом проекта, но не факт
тестовый проект
- Код: Выделить всё
program project1;
uses Unit1, Unit2;
begin
makeleak1;
makeleak2;
end.
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
procedure makeleak1;
implementation
procedure makeleak;
begin
getmem(100);
end;
procedure makeleak1;
begin
writeln('1');
makeleak;
end;
end.
- Код: Выделить всё
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
procedure makeleak2;
implementation
procedure makeleak;
begin
getmem(200);
end;
procedure makeleak2;
begin
writeln('2');
makeleak;
end;
end.
unit1 в подпапке rel, unit2 в подпапке abs
компиляция из основной папки
E:zcadothertest>fpc project1.lpr -gh -g -gl -Furel -FuE:zcadothertestabs
Free Pascal Compiler version 3.1.1 [2017/04/23] for i386
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling project1.lpr
Compiling .relunit1.pas
Compiling .absunit2.pas
Linking project1.exe
62 lines compiled, 0.1 sec, 161808 bytes code, 6980 bytes data
E:zcadothertest>E:zcadothertestproject1.exe
Heap dump by heaptrc unit
67 memory blocks allocated : 1959/2096
65 memory blocks freed : 1659/1792
2 unfreed memory blocks : 300
True heap size : 229376 (96 used in System startup)
True free heap : 228832
Should be : 228848
Call trace for block $002120F0 size 200
$0041316F MAKELEAK2, line 22 of ./abs/unit2.pas
$004016B3 main, line 7 of project1.lpr
Call trace for block $001FA188 size 100
$0041310F MAKELEAK1, line 22 of ./rel/unit1.pas
$004016AE main, line 6 of project1.lpr
компиляция из папки уровнем выше обломалась изза относительного пути
E:zcadother>fpc testproject1.lpr -gh -g -gl -Furel -FuE:zcadothertestabs
Free Pascal Compiler version 3.1.1 [2017/04/23] for i386
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling testproject1.lpr
project1.lpr(3,6) Fatal: Can't find unit Unit1 used by project1
Fatal: Compilation aborted
Error: E:ppbini386-win32ppc386.exe returned an error exitcode
компиляция из папки уровнем выше, относительный путь исправлен на абсолютный
E:zcadother>fpc testproject1.lpr -gh -g -gl -FuE:zcadothertestrel -FuE:zcadothertestabs
Free Pascal Compiler version 3.1.1 [2017/04/23] for i386
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling testproject1.lpr
Compiling .testrelunit1.pas
Compiling .testabsunit2.pas
Linking testproject1.exe
62 lines compiled, 0.1 sec, 161808 bytes code, 6980 bytes data
E:zcadothertest>E:zcadothertestproject1.exe
Heap dump by heaptrc unit
67 memory blocks allocated : 1959/2096
65 memory blocks freed : 1659/1792
2 unfreed memory blocks : 300
True heap size : 229376 (96 used in System startup)
True free heap : 228832
Should be : 228848
Call trace for block $016520F0 size 200
$0041316F MAKELEAK2, line 22 of ./test/abs/unit2.pas
$004016B3 main, line 7 of test/project1.lpr
Call trace for block $0163A188 size 100
$0041310F MAKELEAK1, line 22 of ./test/rel/unit1.pas
$004016AE main, line 6 of test/project1.lpr
Добавлено спустя 26 минут 3 секунды:Имхо относительные пути вполне логичны - да, может возникнуть путаница при одинаковых именах, но зато исходники легко переместить. Наверно лазарус например при сработве точки останова зная папку пректа и все папки подключеных пакетов просто перебирает их в качестве базы пока не найдет файл
Например в техже patch`ах тоже относительные пути, и ниче, все их применяют на свои локальные копии исходников расположеные по разным путям.