Sign in Join
Wiki copytemporary

FPMake/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-**FPMake** \- это система сборки, специализированная для кода на Паскале. Его можно сравнить с другими системами сборки, такими как Make, cons, scons и т.д.
2-
3-С помощью FPMake код разбивается на пакеты. Пакет FPMake может содержать модули, двоичные файлы, примеры и документацию. Каждый пакет может зависеть от других пакетов, и в этом случае пакет может использовать модули своих зависимостей. FPMake использует два разных местоположения для поиска пакетов: общесистемное (глобальное) и локальное местоположение. По умолчанию глобальное расположение указывает на местоположение установленного fpc, а локальное расположение зависит от пользовательских настроек.
4-
5-Некоторые части самого fpc скомпилированы с использованием FPMake. (Пакеты fastcgi и fcl-web в fpc 2.6 и все пакеты, утилиты и ide в fpc 2.7 и выше).
6-
7-Менеджер пакетов [[fppkg/ru|fppkg]] может использоваться для управления пакетами FPMake и их установки из удаленного репозитория.
1+**FPMake** - это система сборки, специализированная для кода на Паскале. Его можно сравнить с другими системами сборки, такими как Make, cons, scons и т.д.
82
9-
3+С помощью FPMake код разбивается на пакеты. Пакет FPMake может содержать модули, двоичные файлы, примеры и документацию. Каждый пакет может зависеть от других пакетов, и в этом случае пакет может использовать модули своих зависимостей. FPMake использует два разных местоположения для поиска пакетов: общесистемное (глобальное) и локальное местоположение. По умолчанию глобальное расположение указывает на местоположение установленного fpc, а локальное расположение зависит от пользовательских настроек.
104
11-## Contents
5+Некоторые части самого fpc скомпилированы с использованием FPMake. (Пакеты fastcgi и fcl-web в fpc 2.6 и все пакеты, утилиты и ide в fpc 2.7 и выше).
126
13- * 1 Как это работает
14- * 2 Сборка пакетов FPMake
15- * 3 Установка пакетов FPMake
16- * 4 Как создать FPMake-пакеты
17- * 4.1 Простой пример fpmake.pp
18- * 4.2 Более сложный пример fpmake.pp
19- * 4.3 Изменение рабочего каталога
20- * 4.4 Добавление каталогов
21- * 4.5 Добавление параметров компилятора
22- * 5 Распространенные сообщения об ошибках
23- * 5.1 Unknown target for unit "[unitname]" in dependencies for [targetname] in package [packagename]
24- * 5.2 Could not find unit directory for dependency package "rtl"
7+Менеджер пакетов [[fppkg/ru|fppkg]] может использоваться для управления пакетами FPMake и их установки из удаленного репозитория.
258
269## Как это работает
2710
28-FPMake работает с Pascal-приложениями, называемыми fpmake, каждое из которых может скомпилировать и установить один или несколько FPMake-пакетов. Все настройки, расположение исходников и инструкции определены внутри исходного кода этого исполняемого файла fpmake. Этот исходный файл обычно сохраняется с именем fpmake.pp. Файл fpmake.pp компилируется в исполняемый файл fpmake, и этот исполняемый файл может создавать и устанавливать конечные пакеты.
11+FPMake работает с Pascal-приложениями, называемыми fpmake, каждое из которых может скомпилировать и установить один или несколько FPMake-пакетов. Все настройки, расположение исходников и инструкции определены внутри исходного кода этого исполняемого файла fpmake. Этот исходный файл обычно сохраняется с именем fpmake.pp. Файл fpmake.pp компилируется в исполняемый файл fpmake, и этот исполняемый файл может создавать и устанавливать конечные пакеты.
2912
3013## Сборка пакетов FPMake
3114
32-Самое простое - использовать [[fppkg/ru|fppkg]] для сборки пакета FPMake. Но это также можно сделать вручную. Найдите исходники пакета, который вы хотите установить, и файл fpmake.pp. Теперь скомпилируйте файл fpmake.pp:
33-```
15+Самое простое - использовать [[fppkg/ru|fppkg]] для сборки пакета FPMake. Но это также можно сделать вручную. Найдите исходники пакета, который вы хотите установить, и файл fpmake.pp. Теперь скомпилируйте файл fpmake.pp:
16+
17+``` bash
3418fpc fpmake.pp
3519```
3620
37-Типичный вывод выглядит так:
38-```
39-Free Pascal Compiler version 2.7.1 [2014/11/26] for i386
40- Copyright (c) 1993-2014 by Florian Klaempfl and others
41- Target OS: Darwin for i386
42- Compiling fpmake.pp
43- Assembling (pipe) fpmake.s
44- Linking fpmake
45- 203 lines compiled, 3.6 sec
21+Типичный вывод выглядит так:
22+
23+``` pascal
24+
25+ Free Pascal Compiler version 2.7.1 [2014/11/26] for i386
26+ Copyright (c) 1993-2014 by Florian Klaempfl and others
27+ Target OS: Darwin for i386
28+ Compiling fpmake.pp
29+ Assembling (pipe) fpmake.s
30+ Linking fpmake
31+ 203 lines compiled, 3.6 sec
4632```
4733
48-Теперь запустите новый исполняемый файл fpmake(.exe), чтобы собрать пакеты. Этот пример содержит только один пакет.
34+Теперь запустите новый исполняемый файл fpmake(.exe), чтобы собрать пакеты. Этот пример содержит только один пакет.
4935
50-На nix'ах или аналогичных ОСях:
51-```
36+На nix'ах или аналогичных ОСях:
37+
38+``` bash
5239./fpmake build --globalunitdir=/usr/local/lib/fpc/2.7.1
5340```
5441
55-На Windows или аналогичных ОСях:
56-```
42+На Windows или аналогичных ОСях:
43+
44+``` pascal
5745fpmake.exe build --globalunitdir=c:\pp
5846```
5947
60-Типичный вывод выглядит так:
61-```
62-Start compiling package fcl-base for target i386-darwin.
63- Compiling src/ascii85.pp
64- Compiling src/avl_tree.pp
65- Compiling src/base64.pp
66- Compiling src/fpmimetypes.pp
67- [100%] Compiled package fcl-base
48+Типичный вывод выглядит так:
49+
50+``` pascal
51+
52+ Start compiling package fcl-base for target i386-darwin.
53+ Compiling src/ascii85.pp
54+ Compiling src/avl_tree.pp
55+ Compiling src/base64.pp
56+ Compiling src/fpmimetypes.pp
57+ [100%] Compiled package fcl-base
6858```
6959
70-Параметр `--globalunitdir` указывает местоположение уже установленных глобальных пакетов. Таким образом, FPMake может найти пакеты, от которых зависит этот пакет. Когда есть второе место, где установлены пакеты, кроме того, можно использовать параметр `--localunitdir`.
60+Параметр `--globalunitdir` указывает местоположение уже установленных глобальных пакетов. Таким образом, FPMake может найти пакеты, от которых зависит этот пакет. Когда есть второе место, где установлены пакеты, кроме того, можно использовать параметр `--localunitdir`.
7161
72-Если вы хотите узнать, какой путь вы должны использовать для параметра `--global(local)unitdir`, то [поищите] каталог, который содержит папку с именем 'fpmkinst'.
62+Если вы хотите узнать, какой путь вы должны использовать для параметра `--global(local)unitdir`, то \[поищите\] каталог, который содержит папку с именем 'fpmkinst'.
7363
74-Чтобы удалить все файлы, сгенерированные во время сборки, и сделать «чистую» сборку, выполните очистку.
64+Чтобы удалить все файлы, сгенерированные во время сборки, и сделать «чистую» сборку, выполните очистку.
7565
76-На nix'ах или аналогичных ОСях:
77-```
66+На nix'ах или аналогичных ОСях:
67+
68+``` bash
7869./fpmake clean
7970```
8071
81-На Windows или аналогичных ОСях:
82-```
72+На Windows или аналогичных ОСях:
73+
74+``` pascal
8375fpmake.exe clean
8476```
8577
86-Используйте параметр `-h`, чтобы получить обзор всех других доступных команд и опций.
78+Используйте параметр `-h`, чтобы получить обзор всех других доступных команд и опций.
8779
8880## Установка пакетов FPMake
8981
90-Как и при сборке пакетов, использование [[fppkg/ru|fppkg]] для установки пакетов FPMake является самым простым. Но это можно сделать вручную. Сначала скомпилируйте пакет, а затем вызовите исполняемый файл fpmake для установки пакета.
82+Как и при сборке пакетов, использование [[fppkg/ru|fppkg]] для установки пакетов FPMake является самым простым. Но это можно сделать вручную. Сначала скомпилируйте пакет, а затем вызовите исполняемый файл fpmake для установки пакета.
9183
92-На никсах и аналогичных ОСях:
93-```
94-./fpmake install --globalunitdir=/usr/local/lib/fpc/2.7.1 --prefix=/usr/local --baseinstalldir=/usr/local/lib/fpc/2.7.1
95-```
84+На никсах и аналогичных ОСях:
9685
97-На Windows и аналогичных ОСях:
98-```
99-fpmake.exe install --globalunitdir=c:\pp --prefix=c:\pp --baseinstalldir=c:\pp
86+``` bash
87+ ./fpmake install --globalunitdir=/usr/local/lib/fpc/2.7.1 --prefix=/usr/local --baseinstalldir=/usr/local/lib/fpc/2.7.1
10088```
10189
102-Типичный вывод выглядит так:
90+На Windows и аналогичных ОСях:
91+
92+``` bash
93+ fpmake.exe install --globalunitdir=c:\pp --prefix=c:\pp --baseinstalldir=c:\pp
10394```
104-Installing package fcl-base
105- Installation package fcl-base for target i386-darwin succeeded
95+
96+Типичный вывод выглядит так:
97+
98+``` bash
99+ Installing package fcl-base
100+ Installation package fcl-base for target i386-darwin succeeded
106101```
107102
108-Globalunitdir содержит местоположение, в котором нужно искать пакеты, от которых может зависеть пакет FPMake, как при сборке пакета. Baseinstalldir - это место, куда должен быть установлен пакет. В общем, это тот же путь, который используется для global- или local-unitdir. Некоторые пакеты также устанавливают файлы за пределами baseinstalldir. как файлы конфигурации. Эти пакеты чаще всего также нуждаются в префиксе, поэтому рекомендуется его указывать.
103+Globalunitdir содержит местоположение, в котором нужно искать пакеты, от которых может зависеть пакет FPMake, как при сборке пакета. Baseinstalldir - это место, куда должен быть установлен пакет. В общем, это тот же путь, который используется для global- или local-unitdir. Некоторые пакеты также устанавливают файлы за пределами baseinstalldir. как файлы конфигурации. Эти пакеты чаще всего также нуждаются в префиксе, поэтому рекомендуется его указывать.
109104
110105## Как создать FPMake-пакеты
111106
112107### Простой пример fpmake.pp
113-```
114-program fpmake;
115-
116- uses fpmkunit;
117-
118- Var
119- P: TPackage;
120- T: TTarget;
121-
122- begin
123- With Installer do
124- begin
125- P := AddPackage('my-nice-program');
126- P.OSes := [win32,openbsd,netbsd,freebsd,darwin,linux];
127- T := P.Targets.AddUnit('myunit');
128- T.ResourceStrings := True;
129- T := P.Targets.AddUnit('myprogram');
130- T.Dependencies.Add('myunit');
131- Run;
132- end;
133- end.
108+
109+``` pascal
110+ program fpmake;
111+
112+ uses fpmkunit;
113+
114+ Var
115+ P: TPackage;
116+ T: TTarget;
117+
118+ begin
119+ With Installer do
120+ begin
121+ P := AddPackage('my-nice-program');
122+ P.OSes := [win32,openbsd,netbsd,freebsd,darwin,linux];
123+ T := P.Targets.AddUnit('myunit');
124+ T.ResourceStrings := True;
125+ T := P.Targets.AddUnit('myprogram');
126+ T.Dependencies.Add('myunit');
127+ Run;
128+ end;
129+ end.
134130```
135131
136132### Более сложный пример fpmake.pp
137-```
138-program fpmake;
139-
140- uses fpmkunit;
141-
142- type TWidgetSet = (wsGDI, wsX, wsCarbon);
143-
144- var WidgetSet : TWidgetSet;
145- P : TPackage;
146-
147- procedure DetermineWidgetSet;
148- Var
149- I : Integer;
150- begin
151- if Defaults.OS in AllWindowsOSes then
152- WidgetSet := wsGDI else
153- if Defaults.OS = MacOS then
154- WidgetSet := wsCarbon else
155- if Defaults.OS in AllUnixOSes then
156- Widgetset := wsX;
157-
158- // Проверьте paramstr(), чтобы увидеть, был ли переопределен набор виджетов в командной строке;
159- For I := 1 to ParamCount do
160- If ParamStr(i) = '--widgetset=X' then
161- WidgetSet := wsX;
133+
134+``` pascal
135+ program fpmake;
136+
137+ uses fpmkunit;
138+
139+ type TWidgetSet = (wsGDI, wsX, wsCarbon);
140+
141+ var WidgetSet : TWidgetSet;
142+ P : TPackage;
143+
144+ procedure DetermineWidgetSet;
145+ Var
146+ I : Integer;
147+ begin
148+ if Defaults.OS in AllWindowsOSes then
149+ WidgetSet := wsGDI else
150+ if Defaults.OS = MacOS then
151+ WidgetSet := wsCarbon else
152+ if Defaults.OS in AllUnixOSes then
153+ Widgetset := wsX;
154+
155+ // Проверьте paramstr(), чтобы увидеть, был ли переопределен набор виджетов в командной строке;
156+ For I := 1 to ParamCount do
157+ If ParamStr(i) = '--widgetset=X' then
158+ WidgetSet := wsX;
159+ end;
160+
161+ begin
162+ DetermineWidgetSet;
163+ With Installer do
164+ begin
165+ // ...
166+ Case WidgetSet of
167+ wsGDI : P.UnitPath.Add('corelib/gdi');
168+ wsX : P.UnitPath.Add('corelib/x11');
169+ // и т.д.
162170 end;
163-
164- begin
165- DetermineWidgetSet;
166- With Installer do
167- begin
168- // ...
169- Case WidgetSet of
170- wsGDI : P.UnitPath.Add('corelib/gdi');
171- wsX : P.UnitPath.Add('corelib/x11');
172- // и т.д.
173- end;
174- // ...
175- Run;
176- end;
177- end.
171+ // ...
172+ Run;
173+ end;
174+ end.
178175```
179176
180177### Изменение рабочего каталога
181178
182-Если вы работаете с модулями в подкаталоге относительно ./fpmake, то "Каталог" можно изменить.
183-```
184-With Installer do
185- begin
186- ...
187- Directory:='some/subdir';
188- T:= Targets.AddUnit('unitinfolder');
189- ...
190- end;
179+Если вы работаете с модулями в подкаталоге относительно ./fpmake, то "Каталог" можно изменить.
180+
181+``` pascal
182+ With Installer do
183+ begin
184+ ...
185+ Directory:='some/subdir';
186+ T:= Targets.AddUnit('unitinfolder');
187+ ...
188+ end;
191189```
192190
193191### Добавление каталогов
194192
195-Вы можете добавить каталоги с помощью пути к модулю:
196-```
197-Case Defaults.OS of
198- Win32, Win64:
199- begin
200- T.UnitPath.Add('corelib/gdi');
201- T.Dependencies.Add('gfx_gdi');
202- end;
203- Linux:
204- begin
205- T.UnitPath.Add('corelib/x11');
206- T.Dependencies.Add('gfx_x11');
207- end;
193+Вы можете добавить каталоги с помощью пути к модулю:
194+
195+``` pascal
196+ Case Defaults.OS of
197+ Win32, Win64:
198+ begin
199+ T.UnitPath.Add('corelib/gdi');
200+ T.Dependencies.Add('gfx_gdi');
208201 end;
202+ Linux:
203+ begin
204+ T.UnitPath.Add('corelib/x11');
205+ T.Dependencies.Add('gfx_x11');
206+ end;
207+ end;
209208```
210209
211-Часто удобнее использовать заданные константы, такие как AllWindowsOS, AllUnixOS, а не конкретные имена ОС.
210+Часто удобнее использовать заданные константы, такие как AllWindowsOS, AllUnixOS, а не конкретные имена ОС.
212211
213212### Добавление параметров компилятора
214213
215-Дополнительные пользовательские параметры компилятора (т.е. параметры командной строки компилятора) могут быть добавлены с помощью TTarget.Options, TPackage.Options или Defaults.Options.
216-```
217-var T : TTarget;
218- ...
219- T.Options.Append('-dSOMEDEFINE');
220- T.Options.Append('-xyzAnythingYouNeed');
221-```
214+Дополнительные пользовательские параметры компилятора (т.е. параметры командной строки компилятора) могут быть добавлены с помощью TTarget.Options, TPackage.Options или Defaults.Options.
222215
223-Или
224-```
225-var P : TPackage;
226- ...
227- P.Options.Append('-dSOMEDEFINE');
216+``` pascal
217+ var T : TTarget;
218+ ...
219+ T.Options.Append('-dSOMEDEFINE');
220+ T.Options.Append('-xyzAnythingYouNeed');
228221```
229222
230-Или
223+Или
224+
225+``` pascal
226+ var P : TPackage;
227+ ...
228+ P.Options.Append('-dSOMEDEFINE');
231229```
232-Defaults.Options.Append('-dSOMEDEFINE');
230+
231+Или
232+
233+``` pascal
234+ Defaults.Options.Append('-dSOMEDEFINE');
233235```
234236
235-**Примечание** : До 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.
237+**Примечание**: До 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.
236238
237239## Распространенные сообщения об ошибках
238240
239-Несколько общих сообщений об ошибках объяснены здесь
241+Несколько общих сообщений об ошибках объяснены здесь
240242
241-### Unknown target for unit "[unitname]" in dependencies for [targetname] in package [packagename]
243+### Unknown target for unit "\[unitname\]" in dependencies for \[targetname\] in package \[packagename\]
242244
243-Неизвестная цель для модуля "[unitname]" в зависимостях для [targetname] в пакете [packagename]
245+Неизвестная цель для модуля "\[unitname\]" в зависимостях для \[targetname\] в пакете \[packagename\]
244246
245-\- Это указывает на проблему в файле fpmake.pp. Существует зависимость от модуля, добавляемая с помощью Target.Dependencies.AddUnit('unitname'). Но нет соответствующей цели, добавленной в пакет с таким же именем модуля.
247+\- Это указывает на проблему в файле fpmake.pp. Существует зависимость от модуля, добавляемая с помощью Target.Dependencies.AddUnit('unitname'). Но нет соответствующей цели, добавленной в пакет с таким же именем модуля.
246248
247-Другими словами: для каждой зависимости от модуля должна быть соответствующая цель в том же пакете. Если существует зависимость от модуля в другом пакете, добавьте зависимость для этого пакета. Зависимость от одного файла в другом пакете не будет работать.
249+Другими словами: для каждой зависимости от модуля должна быть соответствующая цель в том же пакете. Если существует зависимость от модуля в другом пакете, добавьте зависимость для этого пакета. Зависимость от одного файла в другом пакете не будет работать.
248250
249-Также обратите внимание, что имя модуля должно быть без расширения соответствующего файла. (Target.Dependencies.AddUnit('unitnams.pas') не будет работать, в то время как Targets.Addunit требует наличия расширения).
251+Также обратите внимание, что имя модуля должно быть без расширения соответствующего файла. (Target.Dependencies.AddUnit('unitnams.pas') не будет работать, в то время как Targets.Addunit требует наличия расширения).
250252
251253### Could not find unit directory for dependency package "rtl"
252254
253-Не удалось найти каталог модуля для зависимостей пакета "rtl"
255+Не удалось найти каталог модуля для зависимостей пакета "rtl"
254256
255-\- В общем, система fpmake сканирует места, обычно используемые для установки fpc. В случае, если fpmake не найдет каталог FPC, вы получите вышеупомянутую ошибку. В таком случае установите для переменной среды FPCDIR базовый каталог установки FPC, например:
256-```
257+\- В общем, система fpmake сканирует места, обычно используемые для установки fpc. В случае, если fpmake не найдет каталог FPC, вы получите вышеупомянутую ошибку. В таком случае установите для переменной среды FPCDIR базовый каталог установки FPC, например:
258+
259+``` bash
257260export FPCDIR=~/src/lib/fpc/2.6.4
258261```
259262
260-или
261-```
263+или
264+
265+``` bash
262266set FPCDIR=C:\lazarus\fpc\2.6.4\
263267```
264268
265269Это также может быть полезно, если вам необходимо устранить неоднозначность в нескольких установках FPC.
266270
267271---
268-*From the Free Pascal wiki, page "FPMake/ru", as the Internet Archive kept it on 2025-01-17. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
272+*From the Free Pascal wiki, page "FPMake/ru", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history