OSDN Git Service

残りの流し込み。10章未翻訳部分途中まで翻訳.
[omake-japanese/omake_trans.git] / build.rst
1 .. 13-build
2
3 .. _label13:
4
5 13. ビルド関数とユーティリティ
6 ==================================
7
8 .. index::
9    single: .PHONY
10    single: .DEFAULT
11    single: .SUBDIRS
12    single: .SCANNER
13    single: .INCLUDE
14    single: .ORDER
15    single: .BUILD_BEGIN
16    single: .BUILD_SUCCESS
17    single: .BUILD_FAILURE
18 .. _label13.1:
19
20 13.1 ビルドイン .PHONY ターゲット
21 --------------------------------------
22 以下にビルドイン ``.PHONY`` ターゲットの完全なリストを示します。
23
24 * **.PHONY**
25
26   新しいphonyターゲットを宣言します。(:ref:`label8.10`)
27
28 * **.DEFAULT**
29   
30   デフォルトのビルドターゲットを宣言します。(:ref:`label8.7`)
31
32 * **.SUBDIRS**
33   
34   依存関係のスキャナを定義します。(:ref:`label8.8`)
35
36 * **.ORDER**
37   
38   ファイルの依存関係ルールの順番を定義します。(:ref:`label10.3.6`)
39
40 * **.BUILD_BEGIN**
41   
42   ビルド開始時に実行されるコマンド
43
44 * **.BUILD_SUCCESS**
45   
46   ビルドが成功したときに実行されるコマンド
47
48 * **.BUILD_FAILURE**
49   
50   ビルドが失敗したときに実行されるコマンド
51
52 ``.BUILD`` ターゲットはビルドの開始と終了時に実行されるコマンドを指定するために用いられます。 ``.BUILD_BEGIN`` ターゲットはプロジェクトをビルドする前に実行され、 ``.BUILD_FAILURE`` または ``.BUILD_SUCCESS`` はビルドが終了したときに実行されます。
53
54 例えば、以下のルールの集合はビルドの状況について、簡単なメッセージを表示します。 ::
55
56    .BUILD_BEGIN:
57        echo Build starting
58
59    .BUILD_SUCCESS:
60        echo The build was successful
61
62    .BUILD_FAILURE:
63        println($"The build failed: $(length $(find-build-targets Failed)) targets could not be built")
64
65 通常用いる別の使い方としては、ビルドが完了したときに通知するように定義するという方法があります。例えば、以下のルールでは(BUILD_SUMMARY変数を使うことで)ビルドの要約を新しいXターミナル上に表示します。 ::
66
67     .BUILD_FAILURE:
68         xterm -e vi $(BUILD_SUMMARY)
69
70 あなたがプロジェクトに直接これらのルールを追加したくない場合(もしあなたが他の場所で実行するなら、これはよいアイデアです)、あなたはこれらのルールを ``.omakerc`` に定義することができます(詳細はA.8を参照してください)。
71
72 ``find-build-targets`` 関数はさらに具体的なビルドの状況を取得したいときに有用です。 ``--output-*`` オプションを使って出力先を変更している場合、コマンドによって生成された出力はファイルにコピーされることに注意してください。ファイル名は ``Target`` オブジェクトの ``output-file`` プロパティによって指定されます。あなたはビルドの状況をカスタマイズしたいときに、この方法を試してみてください。
73
74 .. _label13.2:
75
76 13.2 オプションとバージョン管理
77 --------------------------------------
78
79 .. index::
80    single: OMakeFlags()
81 .. _label13.2.1:
82
83 13.2.1 OMakeFlags
84 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
85 ::
86
87    OMakeFlags(options)
88       options : String
89
90 ``OMakeFlags`` 関数はOMakefileの内部で ``omake`` のオプションを設定したいときに用いられます。オプションはコマンドライン上でのオプション指定と全く同じフォーマットで指定します。
91
92 例えば、以下のコードは ``VERBOSE`` 環境変数が定義されるまで、プログレスバーを表示し続けます。 ::
93
94     if $(not $(defined-env VERBOSE))
95         OMakeFlags(-S --progress)
96         export
97
98 .. index::
99    single: OMakeVersion()
100 .. _label13.2.2:
101
102 13.2.2 OMakeVersion
103 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
104 ::
105
106    OMakeVersion(version1)
107    OMakeVersion(version1, version2)
108       version1, version2 : String
109
110 ``OMakeVersion`` 関数はOMakefileのバージョンをチェックするときに用いられます。この関数は1つ、または2つの引数を取ります。
111
112 1つの引数をとる形では、omakeのバージョン番号が ``<version1>`` よりも低いときに例外を送出します。2つ引数をとる形では、omakeのバージョン番号は ``version1`` と ``version2`` の間になければなりません。
113
114 .. index::
115    single: cmp-versions()
116 .. _label13.2.3:
117
118 13.2.3 cmp-versions
119 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
120 ::
121
122    $(cmp-versions version1, version2)
123       version1, version2 : String
124
125 ``cmp-versions`` 関数は任意のバージョン文字列を比較することができます。2つのバージョン文字列が等しいときには、この関数は0を返します。一方で、最初の文字列が2番めよりも若いバージョンであるときには負の値を返し、そのいづれでもないときには正の値を返します。
126
127 .. index::
128    single: DefineCommandVars()
129 .. _label13.2.4:
130
131 13.2.4 DefineCommandVars
132 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
133 ::
134
135    DefineCommandVars()
136
137 ``DefineCommandVars`` 関数はコマンドライン上から受け渡した変数を再定義します。変数定義はコマンドラインから ``name=value`` の形で受け渡されます。この関数は、これらの変数を最初の時点で定義するため、omakeが内部で使用します。
138
139 .. _label13.3:
140
141 13.3 依存関係グラフの調査
142 --------------------------------------
143
144 .. index::
145    single: dependencies()
146    single: dependencies-all()
147    single: dependencies-proper()
148 .. _label13.3.1:
149
150 13.3.1 dependencies, dependencies-all, dependencies-proper
151 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
152 ::
153
154    $(dependencies targets) : File Array
155    $(dependencies-all targets) : File Array
156    $(dependencies-proper targets) : File Array
157       targets : File Array
158    raises RuntimeException
159
160 ``dependencies`` 関数は与えられたターゲットの明示的な依存関係の集合を返します。この関数はルールの本体だけに使うことができます。さらに、 ``dependency`` 関数のすべての引数は、このルールの依存先でなければいけません。この制約は、関数が実行されたときにすべての依存関係が解析されていることを保証してくれます。
161
162 ``dependencies-all`` 関数は似ていますが、この関数は依存関係を再帰的に展開し、明示的な依存関係だけでなくターゲットの依存関係すべてを返してくれます。
163
164 ``dependencies-proper`` 関数は『末端』となる依存先を除く、すべての依存関係を再帰的に返します。『末端』のターゲットは依存先やビルドコマンドが存在しないターゲット、つまり、現在のプロジェクト上にあるソースファイルの集合を指しています。
165
166 この3つの関数では、現在のプロジェクトの一部でないファイルは無視されます。また、3つの関数はすべて『実際のファイル』に関連しているphonyやscannerターゲットも返します。
167
168 ``dependencies-proper`` 関数を使う一つの目的としては"clean"ターゲットを実装することが挙げられます。例えば、ビルドしたすべての明示的なファイルを削除する一つの方法としては、 ``dependencies-proper`` をルール部分に使うことです。しかしながら、このルールでは消去する前にプロジェクトをビルドすることが必要となってきます。 ::
169
170     .PHONY: clean
171
172     APP = ...     # 対象となるアプリケーション名
173     clean: $(APP)
174        rm -f $(dependencies-proper $(APP))
175
176 ``dependencies-proper`` 関数はまた、実際のファイルに加えてphonyやscannerターゲットも返してしまうことに注意してください。
177
178 (さらにより良く実装している)別のサンプルについては、 :ref:`label10.3.3` か ``filter-proper-targets`` 関数を参照してください。
179
180 .. index::
181    single: target()
182 .. _label13.3.2:
183
184 13.3.2 target
185 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
186 ::
187
188    $(target targets) : Target Array
189       targets : File Sequence
190    raises RuntimeException
191
192 ``target`` 関数はそれぞれのターゲットに関連しているTargetオブジェクトを返します。詳細な情報は ``Target`` オブジェクトを参照してください。
193
194 .. index::
195    single: find-build-targets()
196 .. _label13.3.3:
197
198 13.3.3 find-build-targets
199 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
200 ::
201
202     $(find-build-targets tag) : Target Array
203        tag : Succeeded | Failed
204
205 ``find-build-targets`` はビルドの実行結果を返します。 ``tag`` では、どのターゲットを返すべきなのかについて指定します。結果は ``tag`` の場合によって異なります。
206
207 * **Succeeded**
208   
209   ビルドが成功したターゲットのリスト
210
211 * **Failed**
212   
213   ビルドできなかったターゲットのリスト
214
215 これらは主に ``.BUILD_SUCCESS`` や ``.BUILD_FAILURE`` phonyターゲットと一緒に使われます。例えば、あなたのプロジェクトの ``OMakefile`` に以下を加えることで、(ビルドが失敗したときに)失敗したターゲットの数を表示します。 ::
216
217     .BUILD_FAILURE:
218         echo "Failed target count: $(length $(find-build-targets Failed))"
219
220 .. index::
221    single: project-directories()
222 .. _label13.3.4:
223
224 13.3.4 project-directories
225 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
226 ::
227
228    $(project-directories) : Dir Array
229
230 ``project-directories`` 関数はプロジェクトの一部であると考えられる、すべてのディレクトリのリストを返します。
231
232 完全なディレクトリのリストを取得するためには、この関数をルールの本体で呼び出すべきです。
233
234 .. index::
235    single: rule()
236 .. _label13.3.5:
237
238 13.3.5 rule
239 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
240 ``rule`` 関数はビルドルールが定義されたときにいつでも呼び出されます。非常に特別なケースを除いて、あなたはこの関数を再定義すべきではありません。 ::
241
242    rule(multiple, target, pattern, sources, options, body) : Rule
243       multiple : String
244       target   : Sequence
245       pattern  : Sequence
246       sources  : Sequence
247       options  : Array
248       body     : Body
249
250 ``rule`` 関数はルールが評価されたときに呼び出されます。
251
252 * **multiple**
253   
254   ルールがダブルコロン ``::`` を用いて定義されているかどうかを示しています。
255
256 * **target**
257   
258   ターゲット名のシーケンスです。
259
260 * **pattern**
261
262   パターンのシーケンスです。このシーケンスは通常の2パートのルール定義のときには空となります。
263
264 * **sources**
265
266   依存関係のシーケンスです。
267
268 * **options**
269
270   オプションの配列です。各々のオプションは、オプション名と値が関連付けられている ``Map`` (辞書型の)オブジェクトとして表現されます。
271
272 * **body**
273
274   ルールの内容を表しています。
275
276 以下のルールを考えてみましょう。 ::
277
278    target: pattern: sources :name1: option1 :name2: option2
279       expr1
280       expr2
281
282 上の式はまず以下の関数の呼び出しに置き換えられ、[]は配列を指定するために用いられ、さらに{}はMapオブジェクトに置き換わります。 ::
283
284    rule(false, target, pattern, sources,
285         { $|:name1:| = option1; $|:name2:| = option2 }
286         [expr1; expr2])
287
288 .. index::
289    single: build()
290 .. _label13.3.6:
291
292 13.3.6 build
293 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
294 ::
295
296     build(targets : File Array) : bool
297
298 与えられたターゲットをビルドします。ビルドが成功した場合、この関数は真を返します。この関数は ``osh`` 上でのみ使うことができます。
299
300 .. _label13.4:
301
302 13.4 OMakerootファイル
303 --------------------------------------
304 標準のOMakerootファイルでは、普通のプロジェクトをビルドするためのルール関数を定義しています。
305
306 .. index::
307    single: ROOT
308    single: CWD
309    single: EMPTY
310    single: STDROOT
311    single: ABORT_ON_COMMAND_ERROR
312    single: SCANNER_MODE
313 .. _label13.4.1:
314
315 13.4.1 変数
316 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
317 * **ROOT** : 現在のプロジェクトのルートディレクトリ
318 * **CWD** : カレント作業ディレクトリ(このディレクトリは、プロジェクトにある各々のOMakefileの集合です)
319 * **EMPTY** : 空文字列
320 * **STDROOT** : 標準でインストールされているOMakerootのファイル名
321 * **ABORT_ON_COMMAND_ERROR** : trueに設定した場合、たとえコマンドの一つがビルドに失敗したとしても、ターゲットはそれを無視します。デフォルトの値はtrueで、通常はそのままにしておくべきです。
322 * **SCANNER_MODE**
323   
324   この変数は以下の4つの値のうちの1つを選んで定義する必要があります(デフォルトは ``enabled`` です)。
325   
326   * **enabled**
327     
328     デフォルトの ``.SCANNER`` ルールを使うことを許可します。たとえルールが明示的に ``:scanner:`` 依存関係を指定していなくても、omakeは同じ名前のターゲットから ``.SCANNER`` を検索します。
329   
330   * **disabled**
331     
332     デフォルトの ``.SCANNER`` ルールを使いません。
333   
334   * **warning**
335     
336     デフォルトの ``.SCANNER`` ルールを使うことを許可しますが、そのうちの一つを使うことになったとき、omakeは常に警告を表示します。
337   
338   * **error**
339     
340     デフォルトの ``.SCANNER`` ルールを使うことを許可しません。もしルールが明示的に ``:scanner:`` 依存関係をしておらず、さらにデフォルトの ``.SCANNER`` を使うことになったとき、このルールのビルドは異常終了します。
341
342 .. index::
343    single: INSTALL
344    single: PATHSEP
345    single: DIRSEP
346    single: EXT_OBJ
347    single: EXT_LIB
348    single: EXT_DLL
349    single: EXT_ASM
350    single: EXE
351 .. _label13.4.2:
352
353 13.4.2 システム変数
354 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
355 * **INSTALL** : プログラムをインストールするためのコマンド( ``Unix`` は ``install`` 、 ``Win32`` は ``cp``)
356 * **PATHSEP** : 通常用いるパスのセパレータ( ``Unix`` は ``:`` 、 ``Win32`` は ``;``)
357 * **DIRSEP** : 通常用いるディレクトリのセパレータ( ``Unix`` は ``/`` 、 ``Win32`` は ``\``)
358 * **EXT_OBJ** : オブジェクトファイルの拡張子( ``Unix`` は ``.o`` 、 ``Win32`` は ``.obj``)
359 * **EXT_LIB** : 静的ライブラリの拡張子( ``Unix`` は ``.a`` 、 ``Win32`` は ``.lib``)
360 * **EXT_DLL** : 共有ライブラリの拡張子( ``Unix`` は ``.so`` 、 ``Win32`` は ``.dll``)
361 * **EXT_ASM** : アセンブリファイルの拡張子( ``Unix`` は ``.s`` 、 ``Win32`` は ``.asm``)
362 * **EXE** : 実行可能形式の拡張子( ``Unix`` は空文字列 、 ``Win32`` や ``Cygwin`` は ``.exe``)
363
364 .. _label13.5:
365
366 13.5 C/C++コードのビルド
367 --------------------------------------
368 OMakeではCやC++のプログラムのビルドを広範囲にわたってサポートする機能を提供しています。このセクションで列挙している関数を使うためには、まずあなたの ``OMakeroot`` ファイルに、以下の一行を追加してください。 ::
369
370   open build/C
371
372 .. _label13.5.1:
373
374 13.5.1 自動設定変数(Autoconfiguration variables)
375 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
376 これらの変数はまず最初にOMakeを実行した時点で『自動設定スタイル(autoconf-style)』 ``static.`` が実行され、その結果を元に決定されます。あなたのプロジェクトを調和の取れた状態にするためには、これらの変数を使用してください。また、あなたはこれらの変数を再定義すべきではありません。
377
378 あなたは強制的にすべてのテストを実行させるために、 ``--configure`` コマンドラインオプション(A.3.9を参照)を使うことができます。
379
380 これらの自動設定変数の値はビルドする環境に依存します。これらの変数の一部は ``Win32`` の環境下と、(Linux, OS X, Cygwinを含む)Unixライクな環境下では異なるふるまいをします。
381
382 .. index::
383    single: GCC_FOUND
384    single: GXX_FOUND
385 .. _label13.5.1.1:
386
387 13.5.1.1 Unixライクなシステム
388 """"""""""""""""""""""""""""""""""""""
389 * **GCC_FOUND** : ``gcc`` バイナリを発見したかどうかを示す真偽値
390 * **GXX_FOUND** : ``g++`` バイナリを発見したかどうかを示す真偽値
391
392 .. index::
393    single: CL_FOUND
394    single: LIB_FOUND
395 .. _label13.5.1.2:
396
397 13.5.1.2 Win32
398 """"""""""""""""""""""""""""""""""""""
399 * **CL_FOUND** : ``cl`` バイナリを発見したかどうかを示す真偽値
400 * **LIB_FOUND** : ``lib`` バイナリを発見したかどうかを示す真偽値
401
402 .. index::
403    single: CC
404    single: CXX
405    single: CPP
406    single: CFLAGS
407    single: CXXFLAGS
408    single: INCLUDES
409    single: LIBS
410    single: CCOUT
411    single: AS
412    single: ASFLAGS
413    single: ASOUT
414    single: AR
415    single: LD
416    single: LDFLAGS
417    single: LDFLAGS_DLL
418    single: LDOUT
419    single: YACC
420    single: LEX
421 .. _label13.5.2:
422
423 13.5.2 C/C++用の設定変数
424 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
425 * **CC**
426
427   Cコンパイラの名前( ``Unix`` では ``gcc`` が発見されたときはデフォルトの値として ``gcc`` が使われます。そうでない場合は ``cc`` が使われます。 ``Win32`` ではデフォルトの値は ``cl /nologo`` です。)
428
429 * **CXX**
430   
431   C++コンパイラの名前( ``Unix`` では ``gcc`` が発見されたときはデフォルトの値として ``gcc`` が使われます。そうでない場合は ``c++`` が使われます。 ``Win32`` ではデフォルトの値は ``cl /nologo`` です。)
432
433 * **CPP**
434   
435   Cプリプロセッサの名前( ``Unix`` ではデフォルトの値は ``cpp`` 、 ``Win32`` の場合は ``cl /E`` )
436
437 * **CFLAGS**
438
439   Cコンパイラに渡すコンパイルフラグ( ``Unix`` ではデフォルトの値は空文字列、 ``Win32`` の場合は ``/DWIN32`` )
440
441 * **CXXFLAGS**
442   
443   C++コンパイラに渡すコンパイルフラグ( ``Unix`` ではデフォルトの値は空文字列、 ``Win32`` の場合は ``/DWIN32`` )
444
445 * **INCLUDES**
446
447   C/C++コンパイラに渡す、追加する検索パスを指定しているディレクトリの値(デフォルトの値は ``.`` )。これらのディレクトリは ``-I`` オプションを追加してC/C++コンパイラに受け渡されます。また、 ``-I`` 接頭辞を追加したインクルードパスは ``PREFIXED_INCLUDES`` 変数で定義されます。
448
449 * **LIBS**
450   
451   プログラムをビルドするときに必要となる追加ライブラリ(デフォルトの値は空文字列)
452
453 * **CCOUT**
454   
455   C/C++コンパイラの出力ファイルの場所を指定するオプション( ``Unix`` ではデフォルトの値は ``-o`` 、 ``Win32`` の場合は ``/Fo`` )
456
457 * **AS**
458   
459   アセンブラの名前( ``Unix`` ではデフォルトの値は ``as`` 、 ``Win32`` の場合は ``ml`` )
460
461 * **ASFLAGS**
462   
463   アセンブラに渡すフラグ( ``Unix`` ではデフォルトの値は空文字列、 ``Win32`` の場合は ``/c /coff`` )
464
465 * **ASOUT**
466   
467   ``AS`` の出力ファイルの場所を指定するオプション文字列( ``Unix`` ではデフォルトの値は ``-o`` 、 ``Win32`` の場合は ``/Fo`` )
468
469 * **AR**
470   
471   静的ライブラリを生成するためのプログラム名( ``Unix`` ではデフォルトの値は ``ar cq`` 、 ``Win32`` の場合は ``lib`` )
472
473 * **LD**
474   
475   リンカの名前( ``Unix`` ではデフォルトの値は ``ld`` 、 ``Win32`` の場合は ``cl`` )
476
477 * **LDFLAGS**
478   
479   リンカに渡すオプション(デフォルトの値は空文字列)
480
481 * **LDFLAGS_DLL**
482   
483   共有ライブラリをコンパイルするときにリンカに受け渡すオプション( ``Unix`` ではデフォルトの値は ``-shared`` 、 ``Win32`` の場合は ``/DLL`` )
484
485 * **LDOUT**
486   
487   C/C++リンカが生成する出力ファイルの場所を指定するオプション( ``Unix`` ではデフォルトの値は ``-o`` 、 ``Win32`` の場合は ``/Fe`` )
488
489 * **YACC**
490   
491   ``yacc`` パーサジェネレータの名前( ``Unix`` ではデフォルトの値は ``yacc`` 、 ``Win32`` の場合は空文字列)
492
493 * **LEX**
494   
495   ``lex`` レキサジェネレータの名前( ``Unix`` ではデフォルトの値は ``lex`` 、 ``Win32`` の場合は空文字列)
496
497 .. _label13.5.3:
498
499 13.5.3 Cファイルの生成
500 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
501 Cのスキャナは(生成されたヘッダファイルのような)生成されたソースファイルについては何も知りません。よって、これらのファイルはスキャナが実行される前に生成される必要があります。
502
503 .. index::
504    single: CGeneratedFiles()
505    single: LocalCGeneratedFiles()
506 .. _label13.5.3.1:
507
508 13.5.3.1 CGeneratedFiles, LocalCGeneratedFiles
509 """"""""""""""""""""""""""""""""""""""""""""""""""""
510 ::
511
512   CGeneratedFiles(files)
513   LocalCGeneratedFiles(files)
514
515 ``CGeneratedFiles`` と ``LocalCGeneratedFiles`` 関数は、Cファイルについての依存関係をスキャンする前に生成される必要があるファイルを指定します。例えば、 ``config.h`` と ``inputs.h`` が両方とも生成されるファイルである場合、以下のように指定します。 ::
516
517   CGeneratedFiles(config.h inputs.h)
518
519 ``CGeneratedFiles`` 関数は *グローバル* です。この関数で指定したファイルは、任意の場所にある任意のCファイルの依存関係をスキャンする前に生成されます。 ``LocalCGeneratedFiles`` 関数はOMakeの通常のスコープルールに従います。
520
521 .. _label13.5.4:
522
523 13.5.4 Cプログラムとライブラリをビルド
524 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
525
526 .. index::
527    single: StaticCLibrary()
528    single: DynamicCLibrary()
529    single: EXT_LIB
530    single: EXT_DLL
531    single: EXT_OBJ
532    single: CDLL_IMPLIES_STATIC
533 .. _label13.5.4.1:
534
535 13.5.4.1 StaticCLibrary, DynamicCLibrary
536 """""""""""""""""""""""""""""""""""""""""""""""
537 ``StaticCLibrary`` は静的ライブラリをビルドし、 ``DynamicCLibrary`` 関数は共有ライブラリ(DLL)をビルドします。 ::
538
539   StaticCLibrary(<target>, <files>)
540   DynamicCLibrary(<target>, <files>)
541
542 ``<target>`` にライブラリの拡張子は *含めません* 。また、同様にして ``<files>`` のリストにもオブジェクトの拡張子は含めません。これらの拡張子は ``EXT_LIB`` ( ``EXT_DLL`` )や ``EXT_OBJ`` 変数によって決定されます。
543
544 この関数はライブラリのファイル名を返します。
545
546 以下のコマンドは ``Unix`` 上のファイル ``a.o b.o c.o`` からライブラリ ``libfoo.a`` をビルドします。あるいは、 ``Win32`` 上のファイル ``a.obj b.obj c.obj`` からライブラリ ``libfoo.lib`` をビルドします。 ::
547
548   StaticCLibrary(libfoo, a b c)
549   .DEFAULT: $(StaticCLibrary libbar, a b c d)
550
551 **CDLL_IMPLIES_STATIC**
552
553 もし ``CDLL_IMPLIES_STATIC`` 変数が真である( ``Win32`` 上でこれはデフォルトの値です)ならば、すべての ``DynamicC`` 関数は共有ライブラリを自動的に生成し、さらに静的ライブラリを生成することを保障してくれます。
554
555 .. index::
556    single: StaticCLibraryCopy()
557    single: DynamicCLibraryCopy()
558 .. _label13.5.4.2:
559
560 13.5.4.2 StaticCLibraryCopy, DynamicCLibraryCopy
561 """""""""""""""""""""""""""""""""""""""""""""""""""""
562 ``StaticCLibraryCopy`` と ``DynamicCLibraryCopy`` 関数はインストール先にライブラリをコピーします。 ::
563
564   StaticCLibraryCopy(<tag>, <dir>, <lib>)
565   DynamicCLibraryCopy(<tag>, <dir>, <lib>)
566
567 ``<tag>`` はターゲットの名前を指定します(大抵は ``.PHONY`` ターゲットです)。 ``<dir>`` はインストール先のディレクトリで、 ``<lib>`` はコピーするライブラリ(拡張子は除く)を指定します。
568
569 この関数はターゲットディレクトリ内でのライブラリのファイル名を返します。
570
571 例えば、以下のコードではライブラリ ``libfoo.a`` を ``/usr/lib`` ディレクトリにコピーします。 ::
572
573   .PHONY: install
574
575   StaticCLibraryCopy(install, /usr/lib, libfoo)
576
577 .. index::
578    single: StaticCLibraryInstall()
579    single: DynamicCLibraryInstall()
580 .. _label13.5.4.3:
581
582 13.5.4.3 StaticCLibraryInstall, DynamicCLibraryInstall
583 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
584 ``StaticCLibraryInstall`` と ``DynamicCLibraryInstall`` 関数はライブラリをビルドし、さらに出力先にインストール先を指定します。これらの関数はターゲットディレクトリ内でのライブラリのファイル名を返します。 ::
585
586   StaticCLibraryInstall(<tag>, <dir>, <libname>, <files>)
587   DynamicCLibraryInstall(<tag>, <dir>, <libname>, <files>)
588
589 ::
590
591   StaticCLibraryInstall(install, /usr/lib, libfoo, a b c)
592
593 .. index::
594    single: StaticCObject()
595    single: StaticCObjectCopy()
596    single: StaticCObjectInstall()
597 .. _label13.5.4.4:
598
599 13.5.4.4 StaticCObject, StaticCObjectCopy, StaticCObjectInstall
600 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
601 これらの関数は ``StaticCLibrary`` , ``StaticCLibraryCopy`` , ``StaticCLibraryInstall`` 関数と似ていますが、これらは *オブジェクト* ファイルをビルドします( ``Unix`` では ``.o`` ファイル、 ``Win32`` では ``.obj`` ファイル)。
602
603 .. index::
604    single: CProgram()
605    single: CFLAGS
606    single: LDFLAGS
607    single: LIBS
608 .. _label13.5.4.5:
609
610 13.5.4.5 CProgram
611 """""""""""""""""""""""""
612 ``CProgram`` 関数はオブジェクトファイルやライブラリの集合からCプログラムをビルドします。 ::
613
614   CProgram(<name>, <files>)
615
616 ``<name>`` にはビルドするプログラムの名前を指定します。 ``<files>`` にはリンクするファイル名を指定します。この関数は実行可能なファイル名を返します。
617
618 オプションは以下の変数を受け渡すことで指定できます。
619
620 * **CFLAGS** : リンクする際にCコンパイラに受け渡すフラグ
621 * **LDFLAGS** : ローダー(loader)に受け渡すフラグ
622 * **LIBS** : リンクするための追加ライブラリ
623
624 例えば、以下のコードはプログラム ``foo`` がファイル ``bar.o`` と ``baz.o`` 、そしてライブラリ ``libfoo.a`` をリンクすることによって生成します。 ::
625
626   section
627      LIBS = libfoo
628      LDFLAGS += -lbar
629      CProgram(foo, bar baz)
630
631 .. index::
632    single: CProgramCopy()
633 .. _label13.5.4.6:
634
635 13.5.4.6 CProgramCopy
636 """"""""""""""""""""""""""""""""""""""
637 ``CProgramCopy`` 関数はインストール先にファイルをコピーします。 ::
638
639   CProgramCopy(<tag>, <dir>, <program>)
640
641   CProgramCopy(install, /usr/bin, foo)
642
643 .. index::
644    single: CProgramInstall()
645 .. _label13.5.4.7:
646
647 13.5.4.7 CProgramInstall
648 """"""""""""""""""""""""""""""""""""""
649 ``CProgramInstall`` 関数は同様にプログラムをビルドし、さらに出力先にインストール先を指定します。 ::
650
651   CProgramInstall(<tag>, <dir>, <name>, <files>)
652
653   section
654      LIBS = libfoo
655      LDFLAGS += -lbar
656      CProgramInstall(install, /usr/bin, foo, bar baz)
657
658 .. index::
659    single: CXXProgram()
660    single: CXXProgramInstall()
661    single: CXX
662    single: CXXFLAGS
663 .. _label13.5.4.8:
664
665 13.5.4.8 CXXProgram, CXXProgramInstall
666 """"""""""""""""""""""""""""""""""""""""""
667 ``CXXProgram`` と ``CXXProgramInstall`` 関数は ``$(CC)`` や ``$(CFLAGS)`` の代わりに ``$(CXX)`` と ``$(CXXFLAGS)`` を使う点を除いて、対応するCの関数と等価です。
668
669 .. index::
670    single: StaticCXXLibrary()
671    single: StaticCXXLibraryCopy()
672    single: StaticCXXLibraryInstall()
673    single: DynamicCXXLibrary()
674    single: DynamicCXXLibraryCopy()
675    single: DynamicCXXLibraryInstall()
676 .. _label13.5.4.9:
677
678 13.5.4.9 StaticCXXLibrary, StaticCXXLibraryCopy, StaticCXXLibraryInstall, DynamicCXXLibrary, DynamicCXXLibraryCopy, DynamicCXXLibararyInstall
679 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
680 同様にして、6つの ``CXXLibrary`` 関数は関連する ``CLibrary`` 関数と等価です。
681
682 .. _label13.6:
683
684 13.6 OCamlコードのビルド
685 --------------------------------------
686 OMakeではOCamlコードをビルドするための、広範的なサポートを提供しています。このサポートには ``ocamlfind`` 、 ``ocamlyacc`` 、 ``menhir`` のようなツールへのサポートも含まれています。このセクションで列挙している関数を使うためには、まずあなたの ``OMakeroot`` ファイルに、以下の一行を追加してください。 ::
687
688   open build/OCaml
689
690 .. index::
691    single: OCAMLOPT_EXISTS
692    single: OCAMLFIND_EXISTS
693    single: OCAMLDEP_MODULES_AVAILABLE
694    single: MENHIR_AVAILABLE
695 .. _label13.6.1:
696
697 13.6.1 OCamlコンパイルに用いる自動設定用の変数
698 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
699 これらの変数はまず最初にOMakeを実行した時点で『自動設定スタイル(autoconf-style)』が実行され、その結果を元に決定されます。あなたのプロジェクトを調和の取れた状態にするためには、これらの変数を使用してください。また、あなたはこれらの変数を再定義すべきではありません。
700
701 あなたは強制的にすべてのテストを実行させるために、 ``--configure`` コマンドラインオプション(A.3.9を参照)を使うことができます。
702
703 * **OCAMLOPT_EXISTS**
704   
705   あなたのマシン上で ``ocamlopt`` (あるいは ``ocamlopt.opt`` )が利用可能である場合は真となります。
706
707 * **OCAMLFIND_EXISTS**
708   
709   あなたのマシン上で ``ocamlfind`` が利用可能である場合は真となります。
710
711 * **OCAMLDEP_MODULES_AVAILABLE**
712   
713   あなたのマシン上で ``-modules`` オプションが理解できるバージョンの ``ocamldep`` が利用可能である場合は真となります。
714
715 * **MENHIR_AVAILABLE**
716   
717   あなたのマシン上でMenhirパーサジェネレータが利用可能である場合は真となります。
718
719 .. index::
720    single: USE_OCAMLFIND
721    single: OCAMLC
722    single: OCAMLOPT
723    single: CAMLP4
724    single: OCAMLLEX
725    single: OCAMLLEXFLAGS
726    single: OCAMLYACC
727    single: OCAMLYACCFLAGS
728    single: OCAMLDEP
729    single: OCAMLDEP_MODULES
730    single: OCAMLDEP_MODULES_ENABLED
731    single: OCAMLMKTOP
732    single: OCAMLLINK
733    single: OCAMLOPTLINK
734    single: OCAMLINCLUDES
735    single: OCAMLFIND
736    single: OCAMLFINDFLAGS
737    single: OCAMLPACKS
738    single: BYTE_ENABLED
739    single: NATIVE_ENABLED
740    single: MENHIR_ENABLED
741 .. _label13.6.2:
742
743 13.6.2 OCamlコンパイルに用いる設定用の変数
744 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
745 以下の変数はあなたのプロジェクト上で再定義可能な変数です。
746
747 * **USE_OCAMLFIND**
748   
749   ``ocamlfind`` ユーティリティを利用するかどうか(デフォルトは ``false`` )
750
751 * **OCAMLC**
752   
753   OCamlバイトコードコンパイラ( ``ocamlc.opt`` が存在していてかつ ``USE_OCAMLFIND`` が設定されていない場合は ``ocamlc.opt`` 。そうでない場合は ``ocamlc`` )
754
755 * **OCAMLOPT**
756   
757   OCamlネイティブコードコンパイラ( ``ocamlc.opt`` が存在していてかつ ``USE_OCAMLFIND`` が設定されていない場合は ``ocamlc.opt`` 。そうでない場合は ``ocamlopt`` )
758
759 * **CAMLP4**
760   
761   ``camlp4`` プリプロセッサ(デフォルトは ``camlp4`` )
762
763 * **OCAMLLEX**
764   
765   OCamlレキサジェネレータ(デフォルトは ``ocamllex`` )
766
767 * **OCAMLLEXFLAGS**
768
769   ``ocamllex`` に渡すフラグ(デフォルトは ``-q`` )
770
771 * **OCAMLYACC**
772   
773   ``$(OCAMLYACC)`` に渡す追加オプション
774
775 * **OCAMLDEP**
776   
777   OCaml依存関係解析器(dependency analyzer)(デフォルトは ``ocamldep`` )
778
779 * **OCAMLDEP_MODULES**
780   
781   ``-module`` オプションが理解できるOCaml依存解析器(デフォルトの値は ``ocamldep`` 、ただし ``ocamldep`` が ``-modules`` で動いた場合のみ。 ``ocamlrun ocamldep-omake -module`` が動く場合は ``ocamlrun ocamldep-omake`` が使われる。どちらでもない場合は空となる)
782
783 * **OCAMLDEP_MODULES_ENABLED**
784   
785   従来の伝統的な ``make -style`` の形で ``OCAMLDEP`` を使う代わりに ``$(OCAMLDEP_MODULES) -modules`` を走らせて、 関連しているすべての ``.ml`` と ``.mli`` ファイルを探しだし、その出力を内部で後処理します。OMakeと、 ``OCAMLDEP`` や生成されたファイルの相互間の動作に関して、より詳しく知りたい方は13.6.5を参照してください。
786
787 * **OCAMLMKTOP**
788
789   OCamlトップループコンパイラ(デフォルトは ``ocamlmktop`` )
790
791 * **OCAMLLINK**
792   
793   OCamlバイトコードリンカ(デフォルトは ``$(OCAMLC)`` )
794
795 * **OCAMLOPTLINK**
796   
797   OCamlネイティブコードリンカ(デフォルトは ``$(OCAMLOPT)`` )
798
799 * **OCAMLINCLUDES**
800   
801   OCamlコンパイラに受け渡す検索パス(デフォルトは ``.`` )。 ``-I`` 接頭辞を加えた検索パスについては、 ``PREFIXED_OCAMLINCLUDES`` 変数で定義されています。
802
803 * **OCAMLFIND**
804   
805   ``ocamlfind`` ユーティリティ( ``USE_OCAMLFIND`` が設定されている場合は ``ocamlfind`` 。そうでない場合は空文字)
806
807 * **OCAMLFINDFLAGS**
808   
809   ``ocamlfind`` に渡すフラグ(デフォルトは空文字で、 ``USE_OCAMLFIND`` が設定されていなければならない)
810
811 * **OCAMLPACKS**
812   
813   ``ocamlfind`` に渡すパッケージ名( ``USE_OCAMLFIND`` が設定されていなければならない)
814
815 * **BYTE_ENABLED**
816   
817   バイトコードコンパイラを使用するかどうかを示すフラグ( ``ocamlopt`` が見つからない場合は ``true`` 。そうでない場合は ``false`` )
818
819 * **NATIVE_ENABLED**
820   
821   ネイティブコードコンパイラを使用するかどうかを示すフラグ( ``ocamlopt`` が見つかる場合は ``true`` 。そうでない場合は ``false`` )。 ``BYTE_ENABLED`` と ``NATIVE_ENABLED`` の両方はどちらとも真にすることができます。また、最低でも一つの変数は真であるべきです。
822
823 * **MENHIR_ENABLED**
824   
825   ``ocamlyacc`` の代わりに ``menhir`` を使いたい場合は ``true`` に設定してください(デフォルトは ``false`` )。
826
827 .. index::
828    single: OCAMLDEPFLAGS
829    single: OCAMLPPFLAGS
830    single: OCAMLCFLAGS
831    single: OCAMLOPTFLAGS
832    single: OCAMLFLAGS
833    single: OCAML_BYTE_LINK_FLAGS
834    single: OCAML_NATIVE_LINK_FLAGS
835    single: OCAML_LINK_FLAGS
836    single: MENHIR_FLAGS
837 .. _label13.6.3:
838
839 13.6.3 OCamlコマンドフラグ
840 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
841 以下の変数はOCamlのツールに渡す *追加* オプションを示しています。
842
843 * **OCAMLDEPFLAGS**
844   
845   ``OCAMLDEP`` と ``OCAMLDEP_MODULES`` に渡すフラグ
846
847 * **OCAMLPPFLAGS**
848   
849   ``CAMLP4`` に渡すフラグ
850
851 * **OCAMLCFLAGS**
852   
853   バイトコードコンパイラに渡すフラグ(デフォルトは ``-g`` )
854
855 * **OCAMLOPTFLAGS**
856   
857   ネイティブコードコンパイラに渡すフラグ(デフォルトは空)
858
859 * **OCAML_BYTE_LINK_FLAGS**
860   
861   バイトコードリンカに渡すフラグ(デフォルトは空)
862
863 * **OCAML_NATIVE_LINK_FLAGS**
864   
865   ネイティブコードリンカに渡すフラグ(デフォルトは空)
866
867 * **OCAML_LINK_FLAGS**
868   
869   両方のリンカに渡すフラグ
870
871 * **MENHIR_FLAGS**
872   
873   ``menhir`` に渡す追加フラグ
874
875 .. index::
876    single: OCAML_LIBS
877    single: OCAML_OTHER_LIBS
878    single: OCAML_CLIBS
879    single: OCAML_LIB_FLAGS
880    single: ABORT_ON_DEPENDENCY_ERRORS
881 .. _label13.6.4:
882
883 13.6.4 ライブラリ変数
884 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
885 以下の変数はリンクの際に用いられます。
886
887 * **OCAML_LIBS**
888   
889   リンカに渡すライブラリ。これらのライブラリはリンク作業時に依存先となります。
890
891 * **OCAML_OTHER_LIBS**
892   
893   リンカに渡す追加ライブラリ。これらのライブラリはリンク作業時に依存先には *含まれません* 。一般的な使用方法としては、OCamlの ``unix`` や ``str`` のような標準ライブラリに用いられます。
894
895 * **OCAML_CLIBS**
896   
897   リンカに渡すCライブラリ
898
899 * **OCAML_LIB_FLAGS**
900   
901   ライブラリリンカに渡すその他のフラグ
902
903 * **ABORT_ON_DEPENDENCY_ERRORS**
904   
905   OCamlのリンカは依存する順番でリストされたOCamlのファイルを必要としています。通常、このセクションにあるすべての関数は ``<files>`` 引数として渡したOCamlのモジュールリストを自動的にソートします。しかし、この変数が ``true`` に設定してある場合、これらの関数に受け渡されたファイルの順番はそのままになります。また、OMakeはこの順番が正しくなかったとしても、生じたエラーメッセージを無視します。
906
907 .. _label13.6.5:
908
909 13.6.5 OCamlファイルを生成
910 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
911 OCaml バージョン 3.09.2に関しては、標準の ``ocamldep`` スキャナは『壊れています』。これに関しての主な問題は、既に存在している依存関係しか検索しないという点です。例えば、 ``foo.ml`` が ``Bar`` に依存しているものとしましょう。 ::
912
913   foo.ml:
914      open Bar
915
916 この場合、ファイル ``bar.ml`` あるいはインクルードパス上の ``bar.ml`` が存在しているときには、デフォルトの ``ocamldep`` はそのファイルの依存関係しか調べません。つまり、もし ``ocamldep`` を走らせた時点では ``bar.mly`` しか存在しなかったとしたら、たとえ ``bar.ml`` と ``bar.mli`` が ``bar.mly`` から生成されたとしても、これらの依存関係は調べない(あるいは出力しない)のです。
917
918 現状のOMakeでは、この問題を解決するための2つの方法を提供しています。一つは生成されるファイルを手動で指定してあげることです。二つめは実験的な方法ですが、自動的に『隠れた』依存関係を調査することです。 ``OCAMLDEP_MODULES_ENABLED`` 変数はどちらの方法を使うのか、制御する変数です。この変数が偽であるときには、手動で指定するという方法が期待されます。また、真であるときには、自動的な調査を試みます。
919
920 .. index::
921    single: OCamlGeneratedFiles()
922    single: LocalOCamlGeneratedFiles()
923 .. _label13.6.5.1:
924
925 13.6.5.1 OCamlGeneratedFiles, LocalOCamlGeneratedFiles
926 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
927 ::
928
929   OCamlGeneratedFiles(files)
930   LocalOCamlGeneratedFiles(files)
931
932 ``OCAMLDEP_MODULES_ENABLED`` 変数が ``false`` に設定してある場合、 ``OCamlGeneratedFiles`` と ``LocalOCamlGeneratedFiles`` 関数は任意のOCamlファイルが依存関係をスキャンする前に、生成される必要のあるファイルを指定します。例えば、 ``parser.ml`` と ``lexer.ml`` の両方が生成されるファイルであった場合、以下のように指定します。 ::
933
934   OCamlGeneratedFiles(parser.ml lexer.ml)
935
936 ``OCamlGeneratedFiles`` 関数は *グローバル* です。この関数の引数は、プロジェクト上の任意の場所にある任意のOCamlファイルの依存関係をスキャンする前に生成されます。 ``LocalOCamlGeneratedFiles`` 関数はOMakeの通常のスコープルールに従います。
937
938 これらの関数は ``OCAMLDEP_MODULES_ENABLED`` 変数が真であるときにはなんの影響も与えません。
939
940 .. _label13.6.5.2:
941
942 13.6.5.2 依存関係の解析中に生成されるファイルを自動的に調査
943 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
944 OMakeが自動的に調査してくれるときに、いちいち手動で生成されるファイルを指定してあげるのは明らかに最適とは言えません。まずこれについて話すために、ファイルの自由なモジュール名 *のみ* を探しだす ``ocamldep`` について話し、その後内部でその結果を後処理することを伝えました。
945
946 この自動的な機構は ``OCAMLDEP_MODULES_ENABLED`` 変数が ``true`` に設定されているときに許可されます。通常、 ``OCAMLDEP_MODULES_ENABLED`` 変数は ``$(OCAMLDEP_MODULES_AVAILABLE)`` に設定されています。
947
948 この処理に依存している ``ocamldep`` の機構はバージョン3.10のOCamlかそれ以降のみに含まれています。一時的に、私たちは ``ocamldep`` を似せて修正したバイトコードバージョンの ``ocamldep-omake`` を用意しました。この似せて作った ``ocamldep`` は自動的に依存関係を調査してくれます。詳細は ``OCAMLDEP_MODULES_AVAILABLE`` と ``OCAMLDEP_MODULES`` 変数の項を参照し、さらにこれらの変数を正しく設定し、利用してください。
949
950 .. index::
951    single: Menhir
952 .. _label13.6.6:
953
954 13.6.6 Menhirパーサジェネレータを使用
955 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
956 Menhirは ``ocamlyacc`` とほとんど互換性がとれており、かつ様々な改良がなされているパーサジェネレータです。機能の一部を以下にリストします(さらに知りたい方はMenhirのホームページ http://cristal.inria.fr/~fpottier/menhir/ を参照してください)。
957
958 * Menhirの解釈(explanations)は、多くの人間が分かりやすくなるように改良されています。
959 * Menhirは複数のファイルにわたって文法を記述できます。これはまた、トークンの集合を複数のgrammerが共有できることを意味しています。
960 * MenhirはObjective Camlモジュールによって記述されたパーサを提供することができます。
961 * jyhによって ``-infer`` オプションが追加されました。これによって、Menhirは生成時にあなたの文法における意味動作(semantic actions)をチェック(typecheck)することができます。
962
963 (訳注: 見ての通り、訳が安定していません。すいませんがあまり信用しないでください)
964
965 どのようにして ``ocamlyacc`` の代わりにMenhirを使用できるのでしょうか?
966
967 1. あなたのプロジェクトの適切な位置(Menhirをどこでも使いたいのならプロジェクトトップの ``OMakefile`` )に、以下の定義を追加してください。 ::
968
969      MENHIR_ENABLED = true
970 2. 必要ならば、Menhirに追加させたいオプションを ``MENHIR_FLAGS`` に追加してください。 ::
971
972      MENHIR_FLAGS += --infer
973
974 このセットアップによって、任意の ``.mly`` 拡張子のファイルはMenhirでコンパイルされます。
975
976 もしあなたの文法(grammar)がいくつかのファイルにわたって分割されているのなら、あなたは ``MenhirMulti`` 関数を用いて、そのことを明示的に指定してあげる必要があります。 ::
977
978     MenhirMulti(target, sources)
979         target : 拡張子を除いたファイル名
980         sources : 拡張子を除いた、文法を定義しているファイル群
981
982 例えば、文法を指定しているファイル ``a.mly`` と ``b.mly`` からパーサファイル ``parse.ml`` と ``parse.mli`` を生成したい場合は、以下のように記述します。 ::
983
984     MenhirMulti(parse, a b)
985
986 .. index::
987    single: OCamlLibrary()
988 .. _label13.6.6.1:
989
990 13.6.6.1 OCamlLibrary
991 """"""""""""""""""""""""""""""""""""""
992 ``OCamlLibrary`` 関数はOCamlライブラリをビルドします。 ::
993
994   OCamlLibrary(<libname>, <files>)
995
996 ``<libname>`` と ``<files>`` は拡張子を *付けないで* 指定してください。
997
998 この関数はルールを定義しているすべてのターゲットのリスト( ``NATIVE_ENABLED`` が設定されているときは ``$(name)$(EXT_LIB)`` を含む)を返します。
999
1000 以下のコードは( ``NATIVE_ENABLED`` が設定されている場合は) ``foo.cmx`` と ``bar.cmx`` から ``libfoo.cmxa`` ライブラリをビルドし、( ``BYTE_ENABLED`` が設定されている場合は) ``foo.cmo`` と ``bar.cmo`` から ``libfoo.cma`` をビルドします。 ::
1001
1002   OCamlLibrary(libfoo, foo bar)
1003
1004 .. index::
1005    single: OCamlPackage()
1006 .. _label13.6.6.2:
1007
1008 13.6.6.2 OCamlPackage
1009 """"""""""""""""""""""""""""""""""""""
1010 ``OCamlPackage`` 関数はOCamlパッケージをビルドします。 ::
1011
1012   OCamlPackage(<name>, <files>)
1013
1014 ``<name>`` と ``<files>`` は拡張子を *付けないで* 指定してください。 ``<files>`` はOCamlコンパイラに ``-for-pack <ident>`` フラグを加えた状態でコンパイルされます。
1015
1016 この関数はルールを定義しているすべてのターゲットのリスト( ``NATIVE_ENABLED`` が設定されているときは ``$(name)$(EXT_LIB)`` を含む)を返します。
1017
1018 以下のコードは( ``NATIVE_ENABLED`` が設定されている場合は) ``foo.cmx`` と ``bar.cmx`` から ``package.cmx`` パッケージをビルドし、( ``BYTE_ENABLED`` が設定されている場合は) ``foo.cmo`` と ``bar.cmo`` から ``package.cmo`` をビルドします。 :: 
1019
1020   OCamlPackage(package, foo bar)
1021
1022 .. index::
1023    single: OCamlLibraryCopy()
1024 .. _label13.6.6.3:
1025
1026 13.6.6.3 OCamlLibraryCopy
1027 """"""""""""""""""""""""""""""""""""""
1028 ``OCamlLibraryCopy`` 関数はライブラリをインストール先にコピーします。 ::
1029
1030   OCamlLibraryCopy(<tag>, <libdir>, <libname>, <interface-files>)
1031
1032 ``<interface-files>`` では ``INSTALL_INTERFACES`` 変数が真である場合にコピーする、追加のインターフェイスファイルを指定します。
1033
1034 .. index::
1035    single: OCamlLibraryInstall()
1036 .. _label13.6.6.4:
1037
1038 13.6.6.4 OCamlLibraryInstall
1039 """"""""""""""""""""""""""""""""""""""
1040 ``OCamlLibraryInstall`` 関数はライブラリをビルドし、加えてインストール先にコピーします。 ::
1041
1042   OCamlLibraryInstall(<tag>, <libdir>, <libname>, <files>)
1043
1044 .. index::
1045    single: OCamlProgram()
1046    single: OCAML_LIBS
1047    single: OCAML_OTHER_LIBS
1048    single: OCAML_CLIBS
1049    single: OCAML_BYTE_LINK_FLAGS
1050    single: OCAML_NATIVE_LINK_FLAGS
1051    single: OCAMLE_LINK_FLAGS
1052 .. _label13.6.6.5:
1053
1054 13.6.6.5 OCamlProgram
1055 """"""""""""""""""""""""""""""""""""""
1056 ``OCamlProgram`` 関数はOCamlプログラムをビルドします。この関数はルールを定義している、すべてのターゲットの配列を返します( ``$(name)$(EXE)`` , ``$(name).run`` ``$(name).opt`` は ``NATIVE_ENABLED`` と ``BYTE_ENABLED`` 変数の値に依存しています)。 ::
1057
1058   OCamlProgram(<name>, <files>)
1059
1060 以下の変数が利用されます。
1061
1062 * **OCAML_LIBS**
1063
1064   リンカに渡す追加ライブラリ(拡張子を除く)。これらのファイルは対象のプログラムの依存先となります。
1065
1066 * **OCAML_OTHER_LIBS**
1067   
1068   リンカに渡す追加ライブラリ(拡張子を除く)。これらのファイルは対象のプログラムの依存先に *なりません* 。
1069
1070 * **OCAML_CLIBS**
1071   
1072   リンカに渡すCライブラリ
1073
1074 * **OCAML_BYTE_LINK_FLAGS**
1075   
1076   ネイティブコードリンカに渡すフラグ
1077
1078 * **OCAML_LINK_FLAGS**
1079   
1080   両方のリンカに渡すフラグ
1081
1082 .. index::
1083    single: OCamlProgramCopy()
1084    single: NATIVE_ENABLED
1085 .. _label13.6.6.6:
1086
1087 13.6.6.6 OCamlProgramCopy
1088 """"""""""""""""""""""""""""""""""""""
1089 ``OCamlProgramInstall`` 関数はOCamlプログラムをインストール先にコピーします。 ::
1090
1091   OCamlProgramCopy(<tag>, <bindir>, <name>)
1092
1093 以下の変数が利用されます。
1094
1095 * **NATIVE_ENABLED**
1096   
1097   ``NATIVE_ENABLED`` 変数が設定されている場合、ネイティブコードの実行形式がコピーされます。そうでない場合はバイトコードの実行形式がコピーされます。
1098
1099 .. index::
1100    single: OCamlProgramInstall()
1101 .. _label13.6.6.7:
1102
1103 13.6.6.7 OCamlProgramInstall
1104 """"""""""""""""""""""""""""""""""""""
1105 ``OCamlProgramInstall`` 関数はプログラムをビルドし、加えてインストール先にコピーします。 ::
1106
1107   OCamlProgramInstall(<tag>, <bindir>, <name>, <files>)
1108
1109 .. _label13.7:
1110
1111 13.7 LaTeXファイルのビルド
1112 --------------------------------------
1113 OMakeではLaTeXドキュメントのビルドをサポートします。このサポートには自動的にBiBTexを実行させ、PostScriptやPDFファイルを生成するためのサポートも含まれます。このセクションで列挙している関数を使うためには、まずあなたの ``OMakeroot`` ファイルに、以下の一行を追加してください。 ::
1114
1115   open build/LaTeX
1116
1117 .. index::
1118    single: LATEX
1119    single: TETEX2_ENABLED
1120    single: LATEXFLAGS
1121    single: BIBTEX
1122    single: MAKEINDEX
1123    single: DVIPS
1124    single: DVIPSFLAGS
1125    single: DVIPDFM
1126    single: DVIPDFMFLAGS
1127    single: PDFLATEX
1128    single: PDFLATEXFLAGS
1129    single: USEPDFLATEX
1130 .. _label13.7.1:
1131
1132 13.7.1 設定用の変数
1133 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1134 以下の変数があなたのプロジェクト上で編集できます。
1135
1136 * **LATEX**
1137   
1138   LaTeXコマンド(デフォルトは ``latex`` )
1139
1140 * **TETEX2_ENABLED**
1141   
1142   TeTeX v.2にある、発展的なLaTeXオプションを利用するかどうかを示すフラグです(デフォルトの値は最初にomakeが ``LaTeX.src`` を読み込むことで決定され、さらにインストールしてあるLaTeXのバージョンに依存します)。
1143
1144 * **LATEXFLAGS**
1145   
1146   LaTexのフラグ(デフォルトの値は ``TETEX2_ENABLED`` 変数に依存する)
1147
1148 * **BIBTEX**
1149   
1150   BibTeXコマンド(デフォルトは ``bibtex`` )
1151
1152 * **MAKEINDEX**
1153   
1154   索引をビルドするコマンド(デフォルトは ``makeindex`` )
1155
1156 * **DVIPS**
1157   
1158   ``.dvi`` からPostScriptに変換するコンバータ(デフォルトは ``dvips`` )
1159
1160 * **DVIPSFLAGS**
1161   
1162   ``dvips`` に渡すフラグ(デフォルトは ``-t letter`` )
1163
1164 * **DVIPDFM**
1165   
1166   ``.dvi`` から ``.pdf`` に変換するコンバータ(デフォルトは ``dvipdfm`` )
1167
1168 * **DVIPDFMFLAGS**
1169   
1170   ``dvipdfm`` に渡すフラグ(デフォルトは ``-p letter`` )
1171
1172 * **PDFLATEX**
1173   
1174   ``.latex`` から ``.pdf`` に変換するコンバータ(デフォルトは ``pdflatex`` )
1175
1176 * **PDFLATEXFLAGS**
1177   
1178   ``pdflatex`` に渡すフラグ(デフォルトは ``$`(LATEXFLAGS)`` )
1179
1180 * **USEPDFLATEX**
1181   
1182   ``.pdf`` ドキュメントを生成するのにdvipdfmではなくpdflatexを使うかどうかを示すフラグ(デフォルトは ``false`` )
1183
1184 .. _label13.7.2:
1185
1186 13.7.2 LaTeXドキュメントのビルド
1187 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1188
1189 .. index::
1190    single: LaTeXDocument()
1191    single: TEXINPUTS
1192    single: TEXDEPS
1193    single: TEXVARS
1194 .. _label13.7.2.1:
1195
1196 13.7.2.1 LaTeXDocument
1197 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1198 ``LaTeXDocument`` 関数はLaTeXドキュメントを生成します。 ::
1199
1200   LaTeXDocument(<name>, <texfiles>)
1201
1202 ``<name>`` と ``<texfiles>`` には拡張子を *付けないで* 指定してください。この関数は生成された ``.ps`` と ``.pdf`` ファイルのファイル名を返します。
1203
1204 以下の変数が利用されます。
1205
1206 * **TEXINPUTS**
1207   
1208   LaTeXの検索パス(ディレクトリの配列で、デフォルトは ``TEXINPUTS`` 環境変数から取得される)
1209
1210 * **TEXDEPS**
1211   
1212   このドキュメントに依存している追加ファイル
1213
1214 * **TEXVARS**
1215   
1216   OMakeの ``TEXINPUTS`` 変数の値に基づいてアップデートすることになっている、環境変数の名前の配列。デフォルトは ``TEXINPUTS BIBINPUTS BSTINPUTS`` 。
1217
1218 .. index::
1219    single: TeXGeneratedFiles()
1220    single: LocalTeXGeneratedFiles()
1221 .. _label13.7.2.2:
1222
1223 13.7.2.2 TeXGeneratedFiles, LocalTeXGeneratedFiles
1224 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1225 ::
1226
1227   TeXGeneratedFiles(files)
1228   LocalTeXGeneratedFiles(files)
1229
1230 ``TeXGeneratedFiles`` と ``LocalTeXGeneratedFiles`` 関数は任意のLaTeXファイルの依存関係をスキャンする前に生成される必要のあるファイルを指定します。例えば、 ``config.tex`` と ``inputs.tex`` が両方とも生成されるファイルであった場合、以下のように指定します。 ::
1231
1232     TeXGeneratedFiles(config.tex inputs.tex)
1233
1234 ``TeXGeneratedFiles`` 関数は *グローバル* です。この関数で指定したファイルは、任意の場所にある任意のTeXファイルの依存関係をスキャンする前に生成されます。 ``LocalTeXGeneratedFiles`` 関数はOMakeの通常のスコープルールに従います。
1235
1236 .. index::
1237    single: LaTeXDocumentCopy()
1238 .. _label13.7.2.3:
1239
1240 13.7.2.3 LaTeXDocumentCopy
1241 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1242 ``LaTeXDocumentCopy`` 関数はインストール先にドキュメントをコピーします。 ::
1243
1244   LaTeXDocumentCopy(<tag>, <libdir>, <installname>, <docname>)
1245
1246 この関数は ``.pdf`` と ``.ps`` ファイルだけコピーします。
1247
1248 .. index::
1249    single: LaTeXDocumentInstall()
1250 .. _label13.7.2.4:
1251
1252 13.7.2.4 LaTeXDocumentInstall
1253 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1254 ``LaTeXDocumentInstall`` 関数はドキュメントをビルドし、加えてインストール先にドキュメントをコピーします。 ::
1255
1256   LaTeXDocumentInstall(<tag>, <libdir>, <installname>, <docname>, <files>)