Difference between revisions of "FPMake/ru"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category included in page template)
 
(5 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{LanguageBar|FPMake}}
+
{{fpmake}}
  
 
'''FPMake''' - это система сборки, специализированная для кода на Паскале. Его можно сравнить с другими системами сборки, такими как Make, cons, scons и т.д.
 
'''FPMake''' - это система сборки, специализированная для кода на Паскале. Его можно сравнить с другими системами сборки, такими как Make, cons, scons и т.д.
Line 15: Line 15:
 
FPMake работает с Pascal-приложениями, называемыми fpmake, каждое из которых может скомпилировать и установить один или несколько FPMake-пакетов. Все настройки, расположение исходников и инструкции определены внутри исходного кода этого исполняемого файла fpmake. Этот исходный файл обычно сохраняется с именем fpmake.pp. Файл fpmake.pp компилируется в исполняемый файл fpmake, и этот исполняемый файл может создавать и устанавливать конечные пакеты.
 
FPMake работает с Pascal-приложениями, называемыми fpmake, каждое из которых может скомпилировать и установить один или несколько FPMake-пакетов. Все настройки, расположение исходников и инструкции определены внутри исходного кода этого исполняемого файла fpmake. Этот исходный файл обычно сохраняется с именем fpmake.pp. Файл fpmake.pp компилируется в исполняемый файл fpmake, и этот исполняемый файл может создавать и устанавливать конечные пакеты.
  
== Building FPMake packages ==
+
== Сборка пакетов FPMake ==
The easiest is to use [[fppkg]] to build a FPMake package. But it can also be done manually. Locate the sources of the package you want to install and the fpmake.pp file. Now compile the fpmake.pp file:
+
Самое простое - использовать [[fppkg/ru|fppkg]] для сборки пакета FPMake. Но это также можно сделать вручную. Найдите исходники пакета, который вы хотите установить, и файл fpmake.pp. Теперь скомпилируйте файл fpmake.pp:
  
fpc fpmake.pp
+
<syntaxhighlight lang="bash">fpc fpmake.pp</syntaxhighlight>
 
 
Typical output looks like:
 
  
 +
Типичный вывод выглядит так:
 +
<syntaxhighlight lang=pascal>
 
  Free Pascal Compiler version 2.7.1 [2014/11/26] for i386
 
  Free Pascal Compiler version 2.7.1 [2014/11/26] for i386
 
  Copyright (c) 1993-2014 by Florian Klaempfl and others
 
  Copyright (c) 1993-2014 by Florian Klaempfl and others
Line 28: Line 28:
 
  Assembling (pipe) fpmake.s
 
  Assembling (pipe) fpmake.s
 
  Linking fpmake
 
  Linking fpmake
  203 lines compiled, 3.6 sec
+
  203 lines compiled, 3.6 sec</syntaxhighlight>
  
Now run the new fpmake(.exe)-executable to build the package(s). This example only contains one package.
+
Теперь запустите новый исполняемый файл fpmake(.exe), чтобы собрать пакеты. Этот пример содержит только один пакет.
  
On unices or alike:
+
На nix'ах или аналогичных ОСях:
./fpmake build --globalunitdir=/usr/local/lib/fpc/2.7.1
+
<syntaxhighlight lang="bash">./fpmake build --globalunitdir=/usr/local/lib/fpc/2.7.1</syntaxhighlight>
  
On Windows or alike:
+
На Windows или аналогичных ОСях:
fpmake.exe build --globalunitdir=c:\pp
+
<syntaxhighlight lang=pascal>fpmake.exe build --globalunitdir=c:\pp</syntaxhighlight>
  
Typical output looks like:
+
Типичный вывод выглядит так:
 +
<syntaxhighlight lang=pascal>
 
  Start compiling package fcl-base for target i386-darwin.
 
  Start compiling package fcl-base for target i386-darwin.
 
       Compiling src/ascii85.pp
 
       Compiling src/ascii85.pp
Line 44: Line 45:
 
       Compiling src/base64.pp
 
       Compiling src/base64.pp
 
       Compiling src/fpmimetypes.pp
 
       Compiling src/fpmimetypes.pp
  [100%] Compiled package fcl-base
+
  [100%] Compiled package fcl-base</syntaxhighlight>
  
The --globalunitdir parameter gives the location of the already installed global packages. This way FPMake can find the packages that this package depends on. When there is a second location where packages are installed, in addition the --localunitdir parameter can be used.
+
Параметр <tt>--globalunitdir</tt> указывает местоположение уже установленных глобальных пакетов. Таким образом, FPMake может найти пакеты, от которых зависит этот пакет. Когда есть второе место, где установлены пакеты, кроме того, можно использовать параметр <tt>--localunitdir</tt>.
  
If you want to know which path you have to use for the --global(local)unitdir parameter, it's the directory which contains a directory called 'fpmkinst'.
+
Если вы хотите узнать, какой путь вы должны использовать для параметра <tt>--global(local)unitdir</tt>, то [поищите] каталог, который содержит папку с именем 'fpmkinst'.
  
To remove all files generated during the build and to be able to do a 'clean' build, perform a clean.
+
Чтобы удалить все файлы, сгенерированные во время сборки, и сделать «чистую» сборку, выполните очистку.
 
   
 
   
On unices or alike:
+
На nix'ах или аналогичных ОСях:
./fpmake clean
+
<syntaxhighlight lang="bash">./fpmake clean</syntaxhighlight>
  
On Windows or alike:
+
На Windows или аналогичных ОСях:
fpmake.exe clean
+
<syntaxhighlight lang=pascal>fpmake.exe clean</syntaxhighlight>
  
Use the -h parameter to get an overview of all other available commands and options.
+
Используйте параметр <tt>-h</tt>, чтобы получить обзор всех других доступных команд и опций.
  
== Installing FPMake packages ==
+
== Установка пакетов FPMake ==
Just like building packages, using [[fppkg]] to install FPMake packages is the easiest. But it canbe done manually. First compile the package and then call the fpmake executable to install the package.
+
Как и при сборке пакетов, использование [[fppkg/ru|fppkg]] для установки пакетов FPMake является самым простым. Но это можно сделать вручную. Сначала скомпилируйте пакет, а затем вызовите исполняемый файл fpmake для установки пакета.
  
On unices or alike:
+
На никсах и аналогичных ОСях:
./fpmake install --globalunitdir=/usr/local/lib/fpc/2.7.1 --prefix=/usr/local --baseinstalldir=/usr/local/lib/fpc/2.7.1
+
<syntaxhighlight lang="bash"> ./fpmake install --globalunitdir=/usr/local/lib/fpc/2.7.1 --prefix=/usr/local --baseinstalldir=/usr/local/lib/fpc/2.7.1</syntaxhighlight>
  
On Windows or alike:
+
На Windows и аналогичных ОСях:
fpmake.exe install --globalunitdir=c:\pp --prefix=c:\pp --baseinstalldir=c:\pp
+
<syntaxhighlight lang="bash"> fpmake.exe install --globalunitdir=c:\pp --prefix=c:\pp --baseinstalldir=c:\pp</syntaxhighlight>
  
Typical output looks like:
+
Типичный вывод выглядит так:
Installing package fcl-base
+
<syntaxhighlight lang="bash"> Installing package fcl-base
  Installation package fcl-base for target i386-darwin succeeded
+
  Installation package fcl-base for target i386-darwin succeeded</syntaxhighlight>
  
The globalunitdir contains the location where to look for packages that the FPMake package can depend on, just like when building the package. The baseinstalldir is the location where the package should be installed to. In general this is the same path as is used for the global- or local-unitdir. Some packages also installs files outside of the baseinstalldir. like configuration files. These packages most often also need a prefix, so providing one is advisable.
+
Globalunitdir содержит местоположение, в котором нужно искать пакеты, от которых может зависеть пакет FPMake, как при сборке пакета. Baseinstalldir - это место, куда должен быть установлен пакет. В общем, это тот же путь, который используется для global- или local-unitdir. Некоторые пакеты также устанавливают файлы за пределами baseinstalldir. как файлы конфигурации. Эти пакеты чаще всего также нуждаются в префиксе, поэтому рекомендуется его указывать.
  
== How to create FPMake-packages ==
+
== Как создать FPMake-пакеты ==
  
=== Simple example fpmake.pp ===
+
=== Простой пример fpmake.pp ===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   program fpmake;
 
   program fpmake;
  
Line 101: Line 102:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== More complex example fpmake.pp ===
+
=== Более сложный пример fpmake.pp ===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   program fpmake;
 
   program fpmake;
  
Line 123: Line 124:
 
       Widgetset := wsX;
 
       Widgetset := wsX;
  
     // Check paramstr() to see if the widgetset was overriden on the commandline;
+
     // Проверьте paramstr(), чтобы увидеть, был ли переопределен набор виджетов в командной строке;
 
     For I := 1 to ParamCount do
 
     For I := 1 to ParamCount do
 
       If ParamStr(i) = '--widgetset=X' then
 
       If ParamStr(i) = '--widgetset=X' then
Line 137: Line 138:
 
         wsGDI : P.UnitPath.Add('corelib/gdi');
 
         wsGDI : P.UnitPath.Add('corelib/gdi');
 
         wsX  : P.UnitPath.Add('corelib/x11');
 
         wsX  : P.UnitPath.Add('corelib/x11');
         // etc.
+
         // и т.д.
 
       end;
 
       end;
 
       //  ...
 
       //  ...
Line 145: Line 146:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Changing Working Directory ===
+
=== Изменение рабочего каталога ===
If working with units in a subfolder relative to ./fpmake, then "Directory" can be changed.
+
Если вы работаете с модулями в подкаталоге относительно ./fpmake, то "Каталог" можно изменить.
<syntaxhighlight>
+
 
 +
<syntaxhighlight lang=pascal>
 
     With Installer do
 
     With Installer do
 
     begin
 
     begin
Line 157: Line 159:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Adding directories ===
+
=== Добавление каталогов ===
  
You can add directories with the unit path:
+
Вы можете добавить каталоги с помощью пути к модулю:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   Case Defaults.OS of
 
   Case Defaults.OS of
 
     Win32, Win64:  
 
     Win32, Win64:  
Line 176: Line 178:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Often, it's more comfortable to use set constants like AllWindowsOSes, AllUnixOSes instead of specific OS names.
+
Часто удобнее использовать заданные константы, такие как AllWindowsOS, AllUnixOS, а не конкретные имена ОС.
  
=== Appending Compiler Options ===
+
=== Добавление параметров компилятора ===
  
Additional custom compiler options (i.e. compiler command line parameters) can be appended by using TTarget.Options, TPackage.Options, or Defaults.Options.
+
Дополнительные пользовательские параметры компилятора (т.е. параметры командной строки компилятора) могут быть добавлены с помощью TTarget.Options, TPackage.Options или Defaults.Options.
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   var T : TTarget;
 
   var T : TTarget;
 
   ...
 
   ...
Line 189: Line 191:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Or
+
Или
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   var P : TPackage;
 
   var P : TPackage;
 
   ...
 
   ...
Line 196: Line 198:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Or
+
Или
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   Defaults.Options.Append('-dSOMEDEFINE');
 
   Defaults.Options.Append('-dSOMEDEFINE');
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'''Note''': Before FPC 2.4.0, Options property was a simple string, and it seems it supported passing only one parameter to the compiler. Since FPC 2.4.0 (more precisely, since svn revision 13223) Options is a TStrings instance, so it's much more flexible. This also means that you should use $ifdefs if you want to use Options and want your fpmake.pp be compatible with both FPC < 2.4.0 and >= 2.4.0.
+
'''Примечание''': До FPC 2.4.0 свойство Options представляло собой простую строку и, похоже, поддерживало передачу только одного параметра компилятору. Начиная с FPC 2.4.0 (точнее, начиная с svn revision 13223), Options - это экземпляр TStrings, поэтому он гораздо более гибкий. Это также означает, что вы должны использовать $ifdefs, если вы хотите использовать Options и хотите, чтобы ваш fpmake.pp был совместим с FPC < 2.4.0 и >= 2.4.0.
  
== Common error messages ==
+
== Распространенные сообщения об ошибках ==
A few common error messages are explained here
+
Несколько общих сообщений об ошибках объяснены здесь
  
 
=== Unknown target for unit "[unitname]" in dependencies for [targetname] in package [packagename] ===
 
=== Unknown target for unit "[unitname]" in dependencies for [targetname] in package [packagename] ===
This indicates a problem in the fpmake.pp file. There is a dependency on a unit, added using Target.Dependencies.AddUnit('unitname'). But there is no corresponding target added to the package with the same unitname.  
+
;Неизвестная цель для модуля "[unitname]" в зависимостях для [targetname] в пакете [packagename]
 +
- Это указывает на проблему в файле fpmake.pp. Существует зависимость от модуля, добавляемая с помощью Target.Dependencies.AddUnit('unitname'). Но нет соответствующей цели, добавленной в пакет с таким же именем модуля.
  
In other words: for every dependency on a unit, there must be a corresponding target within the same package. When there is a dependency on a unit in another package, add a dependency on that package. A dependency on a single file within a different package will not work.
+
Другими словами: для каждой зависимости от модуля должна быть соответствующая цель в том же пакете. Если существует зависимость от модуля в другом пакете, добавьте зависимость для этого пакета. Зависимость от одного файла в другом пакете не будет работать.
  
Also note that the unit name has to be without the extension of the corresponding file. (Target.Dependencies.AddUnit('unitnams.pas') will not work, while Targets.Addunit requires the extension to be present)
+
Также обратите внимание, что имя модуля должно быть без расширения соответствующего файла. (Target.Dependencies.AddUnit('unitnams.pas') не будет работать, в то время как Targets.Addunit требует наличия расширения).
  
 
=== Could not find unit directory for dependency package "rtl" ===
 
=== Could not find unit directory for dependency package "rtl" ===
In general the fpmake system scans the places typically used for fpc installations. In the case that fpmake doesn't find the FPC directory, you'll get the above mentioned error. In such case, set the FPCDIR environment variable to the base dir of the FPC installation, e.g.:
+
;Не удалось найти каталог модуля для зависимостей пакета "rtl"
 
+
- В общем, система fpmake сканирует места, обычно используемые для установки fpc. В случае, если fpmake не найдет каталог FPC, вы получите вышеупомянутую ошибку. В таком случае установите для переменной среды FPCDIR базовый каталог установки FPC, например:
  export FPCDIR=~/src/lib/fpc/2.6.4
 
  
or
+
<syntaxhighlight lang="bash">export FPCDIR=~/src/lib/fpc/2.6.4</syntaxhighlight>
  
  set FPCDIR=C:\lazarus\fpc\2.6.4\
+
или
  
This can also be useful if you have to disambiguate over multiple FPC installations.
+
<syntaxhighlight lang="bash">set FPCDIR=C:\lazarus\fpc\2.6.4\</syntaxhighlight>
  
[[Category:FPC]]
+
Это также может быть полезно, если вам необходимо устранить неоднозначность в нескольких установках FPC.
[[Category:Utilities]]
 
[[Category:Packages]]
 

Latest revision as of 05:33, 16 February 2020

English (en) русский (ru)

FPMake - это система сборки, специализированная для кода на Паскале. Его можно сравнить с другими системами сборки, такими как Make, cons, scons и т.д.

С помощью FPMake код разбивается на пакеты. Пакет FPMake может содержать модули, двоичные файлы, примеры и документацию. Каждый пакет может зависеть от других пакетов, и в этом случае пакет может использовать модули своих зависимостей. FPMake использует два разных местоположения для поиска пакетов: общесистемное (глобальное) и локальное местоположение. По умолчанию глобальное расположение указывает на местоположение установленного fpc, а локальное расположение зависит от пользовательских настроек.

Некоторые части самого fpc скомпилированы с использованием FPMake. (Пакеты fastcgi и fcl-web в fpc 2.6 и все пакеты, утилиты и ide в fpc 2.7 и выше).

Менеджер пакетов fppkg может использоваться для управления пакетами FPMake и их установки из удаленного репозитория.


Как это работает

FPMake работает с Pascal-приложениями, называемыми fpmake, каждое из которых может скомпилировать и установить один или несколько FPMake-пакетов. Все настройки, расположение исходников и инструкции определены внутри исходного кода этого исполняемого файла fpmake. Этот исходный файл обычно сохраняется с именем fpmake.pp. Файл fpmake.pp компилируется в исполняемый файл fpmake, и этот исполняемый файл может создавать и устанавливать конечные пакеты.

Сборка пакетов FPMake

Самое простое - использовать fppkg для сборки пакета FPMake. Но это также можно сделать вручную. Найдите исходники пакета, который вы хотите установить, и файл fpmake.pp. Теперь скомпилируйте файл fpmake.pp:

fpc fpmake.pp

Типичный вывод выглядит так:

 
 Free Pascal Compiler version 2.7.1 [2014/11/26] for i386
 Copyright (c) 1993-2014 by Florian Klaempfl and others
 Target OS: Darwin for i386
 Compiling fpmake.pp
 Assembling (pipe) fpmake.s
 Linking fpmake
 203 lines compiled, 3.6 sec

Теперь запустите новый исполняемый файл fpmake(.exe), чтобы собрать пакеты. Этот пример содержит только один пакет.

На nix'ах или аналогичных ОСях:

./fpmake build --globalunitdir=/usr/local/lib/fpc/2.7.1

На Windows или аналогичных ОСях:

fpmake.exe build --globalunitdir=c:\pp

Типичный вывод выглядит так:

 
 Start compiling package fcl-base for target i386-darwin.
       Compiling src/ascii85.pp
       Compiling src/avl_tree.pp
       Compiling src/base64.pp
       Compiling src/fpmimetypes.pp
 [100%] Compiled package fcl-base

Параметр --globalunitdir указывает местоположение уже установленных глобальных пакетов. Таким образом, FPMake может найти пакеты, от которых зависит этот пакет. Когда есть второе место, где установлены пакеты, кроме того, можно использовать параметр --localunitdir.

Если вы хотите узнать, какой путь вы должны использовать для параметра --global(local)unitdir, то [поищите] каталог, который содержит папку с именем 'fpmkinst'.

Чтобы удалить все файлы, сгенерированные во время сборки, и сделать «чистую» сборку, выполните очистку.

На nix'ах или аналогичных ОСях:

./fpmake clean

На Windows или аналогичных ОСях:

fpmake.exe clean

Используйте параметр -h, чтобы получить обзор всех других доступных команд и опций.

Установка пакетов FPMake

Как и при сборке пакетов, использование fppkg для установки пакетов FPMake является самым простым. Но это можно сделать вручную. Сначала скомпилируйте пакет, а затем вызовите исполняемый файл fpmake для установки пакета.

На никсах и аналогичных ОСях:

 ./fpmake install --globalunitdir=/usr/local/lib/fpc/2.7.1 --prefix=/usr/local --baseinstalldir=/usr/local/lib/fpc/2.7.1

На Windows и аналогичных ОСях:

 fpmake.exe install --globalunitdir=c:\pp --prefix=c:\pp --baseinstalldir=c:\pp

Типичный вывод выглядит так:

 Installing package fcl-base
 Installation package fcl-base for target i386-darwin succeeded

Globalunitdir содержит местоположение, в котором нужно искать пакеты, от которых может зависеть пакет FPMake, как при сборке пакета. Baseinstalldir - это место, куда должен быть установлен пакет. В общем, это тот же путь, который используется для global- или local-unitdir. Некоторые пакеты также устанавливают файлы за пределами baseinstalldir. как файлы конфигурации. Эти пакеты чаще всего также нуждаются в префиксе, поэтому рекомендуется его указывать.

Как создать FPMake-пакеты

Простой пример fpmake.pp

  program fpmake;

  uses fpmkunit;

  Var
    P: TPackage;
    T: TTarget;

  begin
    With Installer do
    begin
      P := AddPackage('my-nice-program');
      P.OSes := [win32,openbsd,netbsd,freebsd,darwin,linux];
      T := P.Targets.AddUnit('myunit');
      T.ResourceStrings := True;
      T := P.Targets.AddUnit('myprogram');
      T.Dependencies.Add('myunit');
      Run;
    end;
  end.

Более сложный пример fpmake.pp

  program fpmake;

  uses fpmkunit;

  type TWidgetSet = (wsGDI, wsX, wsCarbon);

  var WidgetSet : TWidgetSet;
      P : TPackage;

  procedure DetermineWidgetSet;
  Var
    I : Integer;
  begin
    if Defaults.OS in AllWindowsOSes then
      WidgetSet := wsGDI else
    if Defaults.OS = MacOS then
      WidgetSet := wsCarbon else
    if Defaults.OS in AllUnixOSes then
      Widgetset := wsX;

    // Проверьте paramstr(), чтобы увидеть, был ли переопределен набор виджетов в командной строке;
    For I := 1 to ParamCount do
      If ParamStr(i) = '--widgetset=X' then
        WidgetSet := wsX;
  end;

  begin
    DetermineWidgetSet;
    With Installer do
    begin
      // ...
      Case WidgetSet of
        wsGDI : P.UnitPath.Add('corelib/gdi');
        wsX   : P.UnitPath.Add('corelib/x11');
        // и т.д.
      end;
      //  ...
      Run;
    end;
  end.

Изменение рабочего каталога

Если вы работаете с модулями в подкаталоге относительно ./fpmake, то "Каталог" можно изменить.

    With Installer do
    begin
      ...
      Directory:='some/subdir';
      T:= Targets.AddUnit('unitinfolder');
      ...
    end;

Добавление каталогов

Вы можете добавить каталоги с помощью пути к модулю:

  Case Defaults.OS of
    Win32, Win64: 
      begin
        T.UnitPath.Add('corelib/gdi');
        T.Dependencies.Add('gfx_gdi');
      end;
    Linux: 
      begin
        T.UnitPath.Add('corelib/x11');
        T.Dependencies.Add('gfx_x11');
      end;
  end;

Часто удобнее использовать заданные константы, такие как AllWindowsOS, AllUnixOS, а не конкретные имена ОС.

Добавление параметров компилятора

Дополнительные пользовательские параметры компилятора (т.е. параметры командной строки компилятора) могут быть добавлены с помощью TTarget.Options, TPackage.Options или Defaults.Options.

  var T : TTarget;
  ...
  T.Options.Append('-dSOMEDEFINE');
  T.Options.Append('-xyzAnythingYouNeed');

Или

  var P : TPackage;
  ...
  P.Options.Append('-dSOMEDEFINE');

Или

  Defaults.Options.Append('-dSOMEDEFINE');

Примечание: До FPC 2.4.0 свойство Options представляло собой простую строку и, похоже, поддерживало передачу только одного параметра компилятору. Начиная с FPC 2.4.0 (точнее, начиная с svn revision 13223), Options - это экземпляр TStrings, поэтому он гораздо более гибкий. Это также означает, что вы должны использовать $ifdefs, если вы хотите использовать Options и хотите, чтобы ваш fpmake.pp был совместим с FPC < 2.4.0 и >= 2.4.0.

Распространенные сообщения об ошибках

Несколько общих сообщений об ошибках объяснены здесь

Unknown target for unit "[unitname]" in dependencies for [targetname] in package [packagename]

Неизвестная цель для модуля "[unitname]" в зависимостях для [targetname] в пакете [packagename]

- Это указывает на проблему в файле fpmake.pp. Существует зависимость от модуля, добавляемая с помощью Target.Dependencies.AddUnit('unitname'). Но нет соответствующей цели, добавленной в пакет с таким же именем модуля.

Другими словами: для каждой зависимости от модуля должна быть соответствующая цель в том же пакете. Если существует зависимость от модуля в другом пакете, добавьте зависимость для этого пакета. Зависимость от одного файла в другом пакете не будет работать.

Также обратите внимание, что имя модуля должно быть без расширения соответствующего файла. (Target.Dependencies.AddUnit('unitnams.pas') не будет работать, в то время как Targets.Addunit требует наличия расширения).

Could not find unit directory for dependency package "rtl"

Не удалось найти каталог модуля для зависимостей пакета "rtl"

- В общем, система fpmake сканирует места, обычно используемые для установки fpc. В случае, если fpmake не найдет каталог FPC, вы получите вышеупомянутую ошибку. В таком случае установите для переменной среды FPCDIR базовый каталог установки FPC, например:

export FPCDIR=~/src/lib/fpc/2.6.4

или

set FPCDIR=C:\lazarus\fpc\2.6.4\

Это также может быть полезно, если вам необходимо устранить неоднозначность в нескольких установках FPC.