6 ==================================
16 single: .BUILD_SUCCESS
17 single: .BUILD_FAILURE
20 13.1 ビルドイン .PHONY ターゲット
21 --------------------------------------
22 以下にビルドイン ``.PHONY`` ターゲットの完全なリストを示します。
26 新しいphonyターゲットを宣言します。(:ref:`label8.10`)
30 デフォルトのビルドターゲットを宣言します。(:ref:`label8.7`)
34 依存関係のスキャナを定義します。(:ref:`label8.8`)
38 ファイルの依存関係ルールの順番を定義します。(:ref:`label10.3.6`)
52 ``.BUILD`` ターゲットはビルドの開始と終了時に実行されるコマンドを指定するために用いられます。 ``.BUILD_BEGIN`` ターゲットはプロジェクトをビルドする前に実行され、 ``.BUILD_FAILURE`` または ``.BUILD_SUCCESS`` はビルドが終了したときに実行されます。
54 例えば、以下のルールの集合はビルドの状況について、簡単なメッセージを表示します。 ::
60 echo The build was successful
63 println($"The build failed: $(length $(find-build-targets Failed)) targets could not be built")
65 通常用いる別の使い方としては、ビルドが完了したときに通知するように定義するという方法があります。例えば、以下のルールでは(BUILD_SUMMARY変数を使うことで)ビルドの要約を新しいXターミナル上に表示します。 ::
68 xterm -e vi $(BUILD_SUMMARY)
70 あなたがプロジェクトに直接これらのルールを追加したくない場合(もしあなたが他の場所で実行するなら、これはよいアイデアです)、あなたはこれらのルールを ``.omakerc`` に定義することができます(詳細はA.8を参照してください)。
72 ``find-build-targets`` 関数はさらに具体的なビルドの状況を取得したいときに有用です。 ``--output-*`` オプションを使って出力先を変更している場合、コマンドによって生成された出力はファイルにコピーされることに注意してください。ファイル名は ``Target`` オブジェクトの ``output-file`` プロパティによって指定されます。あなたはビルドの状況をカスタマイズしたいときに、この方法を試してみてください。
77 --------------------------------------
84 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
90 ``OMakeFlags`` 関数はOMakefileの内部で ``omake`` のオプションを設定したいときに用いられます。オプションはコマンドライン上でのオプション指定と全く同じフォーマットで指定します。
92 例えば、以下のコードは ``VERBOSE`` 環境変数が定義されるまで、プログレスバーを表示し続けます。 ::
94 if $(not $(defined-env VERBOSE))
95 OMakeFlags(-S --progress)
99 single: OMakeVersion()
103 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
106 OMakeVersion(version1)
107 OMakeVersion(version1, version2)
108 version1, version2 : String
110 ``OMakeVersion`` 関数はOMakefileのバージョンをチェックするときに用いられます。この関数は1つ、または2つの引数を取ります。
112 1つの引数をとる形では、omakeのバージョン番号が ``<version1>`` よりも低いときに例外を送出します。2つ引数をとる形では、omakeのバージョン番号は ``version1`` と ``version2`` の間になければなりません。
115 single: cmp-versions()
119 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
122 $(cmp-versions version1, version2)
123 version1, version2 : String
125 ``cmp-versions`` 関数は任意のバージョン文字列を比較することができます。2つのバージョン文字列が等しいときには、この関数は0を返します。一方で、最初の文字列が2番めよりも若いバージョンであるときには負の値を返し、そのいづれでもないときには正の値を返します。
128 single: DefineCommandVars()
131 13.2.4 DefineCommandVars
132 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
137 ``DefineCommandVars`` 関数はコマンドライン上から受け渡した変数を再定義します。変数定義はコマンドラインから ``name=value`` の形で受け渡されます。この関数は、これらの変数を最初の時点で定義するため、omakeが内部で使用します。
142 --------------------------------------
145 single: dependencies()
146 single: dependencies-all()
147 single: dependencies-proper()
150 13.3.1 dependencies, dependencies-all, dependencies-proper
151 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
154 $(dependencies targets) : File Array
155 $(dependencies-all targets) : File Array
156 $(dependencies-proper targets) : File Array
158 raises RuntimeException
160 ``dependencies`` 関数は与えられたターゲットの明示的な依存関係の集合を返します。この関数はルールの本体だけに使うことができます。さらに、 ``dependency`` 関数のすべての引数は、このルールの依存先でなければいけません。この制約は、関数が実行されたときにすべての依存関係が解析されていることを保証してくれます。
162 ``dependencies-all`` 関数は似ていますが、この関数は依存関係を再帰的に展開し、明示的な依存関係だけでなくターゲットの依存関係すべてを返してくれます。
164 ``dependencies-proper`` 関数は『末端』となる依存先を除く、すべての依存関係を再帰的に返します。『末端』のターゲットは依存先やビルドコマンドが存在しないターゲット、つまり、現在のプロジェクト上にあるソースファイルの集合を指しています。
166 この3つの関数では、現在のプロジェクトの一部でないファイルは無視されます。また、3つの関数はすべて『実際のファイル』に関連しているphonyやscannerターゲットも返します。
168 ``dependencies-proper`` 関数を使う一つの目的としては"clean"ターゲットを実装することが挙げられます。例えば、ビルドしたすべての明示的なファイルを削除する一つの方法としては、 ``dependencies-proper`` をルール部分に使うことです。しかしながら、このルールでは消去する前にプロジェクトをビルドすることが必要となってきます。 ::
172 APP = ... # 対象となるアプリケーション名
174 rm -f $(dependencies-proper $(APP))
176 ``dependencies-proper`` 関数はまた、実際のファイルに加えてphonyやscannerターゲットも返してしまうことに注意してください。
178 (さらにより良く実装している)別のサンプルについては、 :ref:`label10.3.3` か ``filter-proper-targets`` 関数を参照してください。
185 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
188 $(target targets) : Target Array
189 targets : File Sequence
190 raises RuntimeException
192 ``target`` 関数はそれぞれのターゲットに関連しているTargetオブジェクトを返します。詳細な情報は ``Target`` オブジェクトを参照してください。
195 single: find-build-targets()
198 13.3.3 find-build-targets
199 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
202 $(find-build-targets tag) : Target Array
203 tag : Succeeded | Failed
205 ``find-build-targets`` はビルドの実行結果を返します。 ``tag`` では、どのターゲットを返すべきなのかについて指定します。結果は ``tag`` の場合によって異なります。
215 これらは主に ``.BUILD_SUCCESS`` や ``.BUILD_FAILURE`` phonyターゲットと一緒に使われます。例えば、あなたのプロジェクトの ``OMakefile`` に以下を加えることで、(ビルドが失敗したときに)失敗したターゲットの数を表示します。 ::
218 echo "Failed target count: $(length $(find-build-targets Failed))"
221 single: project-directories()
224 13.3.4 project-directories
225 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
228 $(project-directories) : Dir Array
230 ``project-directories`` 関数はプロジェクトの一部であると考えられる、すべてのディレクトリのリストを返します。
232 完全なディレクトリのリストを取得するためには、この関数をルールの本体で呼び出すべきです。
239 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
240 ``rule`` 関数はビルドルールが定義されたときにいつでも呼び出されます。非常に特別なケースを除いて、あなたはこの関数を再定義すべきではありません。 ::
242 rule(multiple, target, pattern, sources, options, body) : Rule
250 ``rule`` 関数はルールが評価されたときに呼び出されます。
254 ルールがダブルコロン ``::`` を用いて定義されているかどうかを示しています。
262 パターンのシーケンスです。このシーケンスは通常の2パートのルール定義のときには空となります。
270 オプションの配列です。各々のオプションは、オプション名と値が関連付けられている ``Map`` (辞書型の)オブジェクトとして表現されます。
278 target: pattern: sources :name1: option1 :name2: option2
282 上の式はまず以下の関数の呼び出しに置き換えられ、[]は配列を指定するために用いられ、さらに{}はMapオブジェクトに置き換わります。 ::
284 rule(false, target, pattern, sources,
285 { $|:name1:| = option1; $|:name2:| = option2 }
293 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
296 build(targets : File Array) : bool
298 与えられたターゲットをビルドします。ビルドが成功した場合、この関数は真を返します。この関数は ``osh`` 上でのみ使うことができます。
303 --------------------------------------
304 標準のOMakerootファイルでは、普通のプロジェクトをビルドするためのルール関数を定義しています。
311 single: ABORT_ON_COMMAND_ERROR
316 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
317 * **ROOT** : 現在のプロジェクトのルートディレクトリ
318 * **CWD** : カレント作業ディレクトリ(このディレクトリは、プロジェクトにある各々のOMakefileの集合です)
320 * **STDROOT** : 標準でインストールされているOMakerootのファイル名
321 * **ABORT_ON_COMMAND_ERROR** : trueに設定した場合、たとえコマンドの一つがビルドに失敗したとしても、ターゲットはそれを無視します。デフォルトの値はtrueで、通常はそのままにしておくべきです。
324 この変数は以下の4つの値のうちの1つを選んで定義する必要があります(デフォルトは ``enabled`` です)。
328 デフォルトの ``.SCANNER`` ルールを使うことを許可します。たとえルールが明示的に ``:scanner:`` 依存関係を指定していなくても、omakeは同じ名前のターゲットから ``.SCANNER`` を検索します。
332 デフォルトの ``.SCANNER`` ルールを使いません。
336 デフォルトの ``.SCANNER`` ルールを使うことを許可しますが、そのうちの一つを使うことになったとき、omakeは常に警告を表示します。
340 デフォルトの ``.SCANNER`` ルールを使うことを許可しません。もしルールが明示的に ``:scanner:`` 依存関係をしておらず、さらにデフォルトの ``.SCANNER`` を使うことになったとき、このルールのビルドは異常終了します。
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``)
367 --------------------------------------
368 OMakeではCやC++のプログラムのビルドを広範囲にわたってサポートする機能を提供しています。このセクションで列挙している関数を使うためには、まずあなたの ``OMakeroot`` ファイルに、以下の一行を追加してください。 ::
374 13.5.1 自動設定変数(Autoconfiguration variables)
375 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
376 これらの変数はまず最初にOMakeを実行した時点で『自動設定スタイル(autoconf-style)』 ``static.`` が実行され、その結果を元に決定されます。あなたのプロジェクトを調和の取れた状態にするためには、これらの変数を使用してください。また、あなたはこれらの変数を再定義すべきではありません。
378 あなたは強制的にすべてのテストを実行させるために、 ``--configure`` コマンドラインオプション(A.3.9を参照)を使うことができます。
380 これらの自動設定変数の値はビルドする環境に依存します。これらの変数の一部は ``Win32`` の環境下と、(Linux, OS X, Cygwinを含む)Unixライクな環境下では異なるふるまいをします。
387 13.5.1.1 Unixライクなシステム
388 """"""""""""""""""""""""""""""""""""""
389 * **GCC_FOUND** : ``gcc`` バイナリを発見したかどうかを示す真偽値
390 * **GXX_FOUND** : ``g++`` バイナリを発見したかどうかを示す真偽値
398 """"""""""""""""""""""""""""""""""""""
399 * **CL_FOUND** : ``cl`` バイナリを発見したかどうかを示す真偽値
400 * **LIB_FOUND** : ``lib`` バイナリを発見したかどうかを示す真偽値
424 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
427 Cコンパイラの名前( ``Unix`` では ``gcc`` が発見されたときはデフォルトの値として ``gcc`` が使われます。そうでない場合は ``cc`` が使われます。 ``Win32`` ではデフォルトの値は ``cl /nologo`` です。)
431 C++コンパイラの名前( ``Unix`` では ``gcc`` が発見されたときはデフォルトの値として ``gcc`` が使われます。そうでない場合は ``c++`` が使われます。 ``Win32`` ではデフォルトの値は ``cl /nologo`` です。)
435 Cプリプロセッサの名前( ``Unix`` ではデフォルトの値は ``cpp`` 、 ``Win32`` の場合は ``cl /E`` )
439 Cコンパイラに渡すコンパイルフラグ( ``Unix`` ではデフォルトの値は空文字列、 ``Win32`` の場合は ``/DWIN32`` )
443 C++コンパイラに渡すコンパイルフラグ( ``Unix`` ではデフォルトの値は空文字列、 ``Win32`` の場合は ``/DWIN32`` )
447 C/C++コンパイラに渡す、追加する検索パスを指定しているディレクトリの値(デフォルトの値は ``.`` )。これらのディレクトリは ``-I`` オプションを追加してC/C++コンパイラに受け渡されます。また、 ``-I`` 接頭辞を追加したインクルードパスは ``PREFIXED_INCLUDES`` 変数で定義されます。
451 プログラムをビルドするときに必要となる追加ライブラリ(デフォルトの値は空文字列)
455 C/C++コンパイラの出力ファイルの場所を指定するオプション( ``Unix`` ではデフォルトの値は ``-o`` 、 ``Win32`` の場合は ``/Fo`` )
459 アセンブラの名前( ``Unix`` ではデフォルトの値は ``as`` 、 ``Win32`` の場合は ``ml`` )
463 アセンブラに渡すフラグ( ``Unix`` ではデフォルトの値は空文字列、 ``Win32`` の場合は ``/c /coff`` )
467 ``AS`` の出力ファイルの場所を指定するオプション文字列( ``Unix`` ではデフォルトの値は ``-o`` 、 ``Win32`` の場合は ``/Fo`` )
471 静的ライブラリを生成するためのプログラム名( ``Unix`` ではデフォルトの値は ``ar cq`` 、 ``Win32`` の場合は ``lib`` )
475 リンカの名前( ``Unix`` ではデフォルトの値は ``ld`` 、 ``Win32`` の場合は ``cl`` )
479 リンカに渡すオプション(デフォルトの値は空文字列)
483 共有ライブラリをコンパイルするときにリンカに受け渡すオプション( ``Unix`` ではデフォルトの値は ``-shared`` 、 ``Win32`` の場合は ``/DLL`` )
487 C/C++リンカが生成する出力ファイルの場所を指定するオプション( ``Unix`` ではデフォルトの値は ``-o`` 、 ``Win32`` の場合は ``/Fe`` )
491 ``yacc`` パーサジェネレータの名前( ``Unix`` ではデフォルトの値は ``yacc`` 、 ``Win32`` の場合は空文字列)
495 ``lex`` レキサジェネレータの名前( ``Unix`` ではデフォルトの値は ``lex`` 、 ``Win32`` の場合は空文字列)
500 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
501 Cのスキャナは(生成されたヘッダファイルのような)生成されたソースファイルについては何も知りません。よって、これらのファイルはスキャナが実行される前に生成される必要があります。
504 single: CGeneratedFiles()
505 single: LocalCGeneratedFiles()
508 13.5.3.1 CGeneratedFiles, LocalCGeneratedFiles
509 """"""""""""""""""""""""""""""""""""""""""""""""""""
512 CGeneratedFiles(files)
513 LocalCGeneratedFiles(files)
515 ``CGeneratedFiles`` と ``LocalCGeneratedFiles`` 関数は、Cファイルについての依存関係をスキャンする前に生成される必要があるファイルを指定します。例えば、 ``config.h`` と ``inputs.h`` が両方とも生成されるファイルである場合、以下のように指定します。 ::
517 CGeneratedFiles(config.h inputs.h)
519 ``CGeneratedFiles`` 関数は *グローバル* です。この関数で指定したファイルは、任意の場所にある任意のCファイルの依存関係をスキャンする前に生成されます。 ``LocalCGeneratedFiles`` 関数はOMakeの通常のスコープルールに従います。
523 13.5.4 Cプログラムとライブラリをビルド
524 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
527 single: StaticCLibrary()
528 single: DynamicCLibrary()
532 single: CDLL_IMPLIES_STATIC
535 13.5.4.1 StaticCLibrary, DynamicCLibrary
536 """""""""""""""""""""""""""""""""""""""""""""""
537 ``StaticCLibrary`` は静的ライブラリをビルドし、 ``DynamicCLibrary`` 関数は共有ライブラリ(DLL)をビルドします。 ::
539 StaticCLibrary(<target>, <files>)
540 DynamicCLibrary(<target>, <files>)
542 ``<target>`` にライブラリの拡張子は *含めません* 。また、同様にして ``<files>`` のリストにもオブジェクトの拡張子は含めません。これらの拡張子は ``EXT_LIB`` ( ``EXT_DLL`` )や ``EXT_OBJ`` 変数によって決定されます。
544 この関数はライブラリのファイル名を返します。
546 以下のコマンドは ``Unix`` 上のファイル ``a.o b.o c.o`` からライブラリ ``libfoo.a`` をビルドします。あるいは、 ``Win32`` 上のファイル ``a.obj b.obj c.obj`` からライブラリ ``libfoo.lib`` をビルドします。 ::
548 StaticCLibrary(libfoo, a b c)
549 .DEFAULT: $(StaticCLibrary libbar, a b c d)
551 **CDLL_IMPLIES_STATIC**
553 もし ``CDLL_IMPLIES_STATIC`` 変数が真である( ``Win32`` 上でこれはデフォルトの値です)ならば、すべての ``DynamicC`` 関数は共有ライブラリを自動的に生成し、さらに静的ライブラリを生成することを保障してくれます。
556 single: StaticCLibraryCopy()
557 single: DynamicCLibraryCopy()
560 13.5.4.2 StaticCLibraryCopy, DynamicCLibraryCopy
561 """""""""""""""""""""""""""""""""""""""""""""""""""""
562 ``StaticCLibraryCopy`` と ``DynamicCLibraryCopy`` 関数はインストール先にライブラリをコピーします。 ::
564 StaticCLibraryCopy(<tag>, <dir>, <lib>)
565 DynamicCLibraryCopy(<tag>, <dir>, <lib>)
567 ``<tag>`` はターゲットの名前を指定します(大抵は ``.PHONY`` ターゲットです)。 ``<dir>`` はインストール先のディレクトリで、 ``<lib>`` はコピーするライブラリ(拡張子は除く)を指定します。
569 この関数はターゲットディレクトリ内でのライブラリのファイル名を返します。
571 例えば、以下のコードではライブラリ ``libfoo.a`` を ``/usr/lib`` ディレクトリにコピーします。 ::
575 StaticCLibraryCopy(install, /usr/lib, libfoo)
578 single: StaticCLibraryInstall()
579 single: DynamicCLibraryInstall()
582 13.5.4.3 StaticCLibraryInstall, DynamicCLibraryInstall
583 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
584 ``StaticCLibraryInstall`` と ``DynamicCLibraryInstall`` 関数はライブラリをビルドし、さらに出力先にインストール先を指定します。これらの関数はターゲットディレクトリ内でのライブラリのファイル名を返します。 ::
586 StaticCLibraryInstall(<tag>, <dir>, <libname>, <files>)
587 DynamicCLibraryInstall(<tag>, <dir>, <libname>, <files>)
591 StaticCLibraryInstall(install, /usr/lib, libfoo, a b c)
594 single: StaticCObject()
595 single: StaticCObjectCopy()
596 single: StaticCObjectInstall()
599 13.5.4.4 StaticCObject, StaticCObjectCopy, StaticCObjectInstall
600 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
601 これらの関数は ``StaticCLibrary`` , ``StaticCLibraryCopy`` , ``StaticCLibraryInstall`` 関数と似ていますが、これらは *オブジェクト* ファイルをビルドします( ``Unix`` では ``.o`` ファイル、 ``Win32`` では ``.obj`` ファイル)。
611 """""""""""""""""""""""""
612 ``CProgram`` 関数はオブジェクトファイルやライブラリの集合からCプログラムをビルドします。 ::
614 CProgram(<name>, <files>)
616 ``<name>`` にはビルドするプログラムの名前を指定します。 ``<files>`` にはリンクするファイル名を指定します。この関数は実行可能なファイル名を返します。
618 オプションは以下の変数を受け渡すことで指定できます。
620 * **CFLAGS** : リンクする際にCコンパイラに受け渡すフラグ
621 * **LDFLAGS** : ローダー(loader)に受け渡すフラグ
622 * **LIBS** : リンクするための追加ライブラリ
624 例えば、以下のコードはプログラム ``foo`` がファイル ``bar.o`` と ``baz.o`` 、そしてライブラリ ``libfoo.a`` をリンクすることによって生成します。 ::
629 CProgram(foo, bar baz)
632 single: CProgramCopy()
635 13.5.4.6 CProgramCopy
636 """"""""""""""""""""""""""""""""""""""
637 ``CProgramCopy`` 関数はインストール先にファイルをコピーします。 ::
639 CProgramCopy(<tag>, <dir>, <program>)
641 CProgramCopy(install, /usr/bin, foo)
644 single: CProgramInstall()
647 13.5.4.7 CProgramInstall
648 """"""""""""""""""""""""""""""""""""""
649 ``CProgramInstall`` 関数は同様にプログラムをビルドし、さらに出力先にインストール先を指定します。 ::
651 CProgramInstall(<tag>, <dir>, <name>, <files>)
656 CProgramInstall(install, /usr/bin, foo, bar baz)
660 single: CXXProgramInstall()
665 13.5.4.8 CXXProgram, CXXProgramInstall
666 """"""""""""""""""""""""""""""""""""""""""
667 ``CXXProgram`` と ``CXXProgramInstall`` 関数は ``$(CC)`` や ``$(CFLAGS)`` の代わりに ``$(CXX)`` と ``$(CXXFLAGS)`` を使う点を除いて、対応するCの関数と等価です。
670 single: StaticCXXLibrary()
671 single: StaticCXXLibraryCopy()
672 single: StaticCXXLibraryInstall()
673 single: DynamicCXXLibrary()
674 single: DynamicCXXLibraryCopy()
675 single: DynamicCXXLibraryInstall()
678 13.5.4.9 StaticCXXLibrary, StaticCXXLibraryCopy, StaticCXXLibraryInstall, DynamicCXXLibrary, DynamicCXXLibraryCopy, DynamicCXXLibararyInstall
679 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
680 同様にして、6つの ``CXXLibrary`` 関数は関連する ``CLibrary`` 関数と等価です。
685 --------------------------------------
686 OMakeではOCamlコードをビルドするための、広範的なサポートを提供しています。このサポートには ``ocamlfind`` 、 ``ocamlyacc`` 、 ``menhir`` のようなツールへのサポートも含まれています。このセクションで列挙している関数を使うためには、まずあなたの ``OMakeroot`` ファイルに、以下の一行を追加してください。 ::
691 single: OCAMLOPT_EXISTS
692 single: OCAMLFIND_EXISTS
693 single: OCAMLDEP_MODULES_AVAILABLE
694 single: MENHIR_AVAILABLE
697 13.6.1 OCamlコンパイルに用いる自動設定用の変数
698 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
699 これらの変数はまず最初にOMakeを実行した時点で『自動設定スタイル(autoconf-style)』が実行され、その結果を元に決定されます。あなたのプロジェクトを調和の取れた状態にするためには、これらの変数を使用してください。また、あなたはこれらの変数を再定義すべきではありません。
701 あなたは強制的にすべてのテストを実行させるために、 ``--configure`` コマンドラインオプション(A.3.9を参照)を使うことができます。
703 * **OCAMLOPT_EXISTS**
705 あなたのマシン上で ``ocamlopt`` (あるいは ``ocamlopt.opt`` )が利用可能である場合は真となります。
707 * **OCAMLFIND_EXISTS**
709 あなたのマシン上で ``ocamlfind`` が利用可能である場合は真となります。
711 * **OCAMLDEP_MODULES_AVAILABLE**
713 あなたのマシン上で ``-modules`` オプションが理解できるバージョンの ``ocamldep`` が利用可能である場合は真となります。
715 * **MENHIR_AVAILABLE**
717 あなたのマシン上でMenhirパーサジェネレータが利用可能である場合は真となります。
720 single: USE_OCAMLFIND
725 single: OCAMLLEXFLAGS
727 single: OCAMLYACCFLAGS
729 single: OCAMLDEP_MODULES
730 single: OCAMLDEP_MODULES_ENABLED
734 single: OCAMLINCLUDES
736 single: OCAMLFINDFLAGS
739 single: NATIVE_ENABLED
740 single: MENHIR_ENABLED
743 13.6.2 OCamlコンパイルに用いる設定用の変数
744 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
745 以下の変数はあなたのプロジェクト上で再定義可能な変数です。
749 ``ocamlfind`` ユーティリティを利用するかどうか(デフォルトは ``false`` )
753 OCamlバイトコードコンパイラ( ``ocamlc.opt`` が存在していてかつ ``USE_OCAMLFIND`` が設定されていない場合は ``ocamlc.opt`` 。そうでない場合は ``ocamlc`` )
757 OCamlネイティブコードコンパイラ( ``ocamlc.opt`` が存在していてかつ ``USE_OCAMLFIND`` が設定されていない場合は ``ocamlc.opt`` 。そうでない場合は ``ocamlopt`` )
761 ``camlp4`` プリプロセッサ(デフォルトは ``camlp4`` )
765 OCamlレキサジェネレータ(デフォルトは ``ocamllex`` )
769 ``ocamllex`` に渡すフラグ(デフォルトは ``-q`` )
773 ``$(OCAMLYACC)`` に渡す追加オプション
777 OCaml依存関係解析器(dependency analyzer)(デフォルトは ``ocamldep`` )
779 * **OCAMLDEP_MODULES**
781 ``-module`` オプションが理解できるOCaml依存解析器(デフォルトの値は ``ocamldep`` 、ただし ``ocamldep`` が ``-modules`` で動いた場合のみ。 ``ocamlrun ocamldep-omake -module`` が動く場合は ``ocamlrun ocamldep-omake`` が使われる。どちらでもない場合は空となる)
783 * **OCAMLDEP_MODULES_ENABLED**
785 従来の伝統的な ``make -style`` の形で ``OCAMLDEP`` を使う代わりに ``$(OCAMLDEP_MODULES) -modules`` を走らせて、 関連しているすべての ``.ml`` と ``.mli`` ファイルを探しだし、その出力を内部で後処理します。OMakeと、 ``OCAMLDEP`` や生成されたファイルの相互間の動作に関して、より詳しく知りたい方は13.6.5を参照してください。
789 OCamlトップループコンパイラ(デフォルトは ``ocamlmktop`` )
793 OCamlバイトコードリンカ(デフォルトは ``$(OCAMLC)`` )
797 OCamlネイティブコードリンカ(デフォルトは ``$(OCAMLOPT)`` )
801 OCamlコンパイラに受け渡す検索パス(デフォルトは ``.`` )。 ``-I`` 接頭辞を加えた検索パスについては、 ``PREFIXED_OCAMLINCLUDES`` 変数で定義されています。
805 ``ocamlfind`` ユーティリティ( ``USE_OCAMLFIND`` が設定されている場合は ``ocamlfind`` 。そうでない場合は空文字)
809 ``ocamlfind`` に渡すフラグ(デフォルトは空文字で、 ``USE_OCAMLFIND`` が設定されていなければならない)
813 ``ocamlfind`` に渡すパッケージ名( ``USE_OCAMLFIND`` が設定されていなければならない)
817 バイトコードコンパイラを使用するかどうかを示すフラグ( ``ocamlopt`` が見つからない場合は ``true`` 。そうでない場合は ``false`` )
821 ネイティブコードコンパイラを使用するかどうかを示すフラグ( ``ocamlopt`` が見つかる場合は ``true`` 。そうでない場合は ``false`` )。 ``BYTE_ENABLED`` と ``NATIVE_ENABLED`` の両方はどちらとも真にすることができます。また、最低でも一つの変数は真であるべきです。
825 ``ocamlyacc`` の代わりに ``menhir`` を使いたい場合は ``true`` に設定してください(デフォルトは ``false`` )。
828 single: OCAMLDEPFLAGS
831 single: OCAMLOPTFLAGS
833 single: OCAML_BYTE_LINK_FLAGS
834 single: OCAML_NATIVE_LINK_FLAGS
835 single: OCAML_LINK_FLAGS
840 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
841 以下の変数はOCamlのツールに渡す *追加* オプションを示しています。
845 ``OCAMLDEP`` と ``OCAMLDEP_MODULES`` に渡すフラグ
853 バイトコードコンパイラに渡すフラグ(デフォルトは ``-g`` )
857 ネイティブコードコンパイラに渡すフラグ(デフォルトは空)
859 * **OCAML_BYTE_LINK_FLAGS**
861 バイトコードリンカに渡すフラグ(デフォルトは空)
863 * **OCAML_NATIVE_LINK_FLAGS**
865 ネイティブコードリンカに渡すフラグ(デフォルトは空)
867 * **OCAML_LINK_FLAGS**
877 single: OCAML_OTHER_LIBS
879 single: OCAML_LIB_FLAGS
880 single: ABORT_ON_DEPENDENCY_ERRORS
884 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
889 リンカに渡すライブラリ。これらのライブラリはリンク作業時に依存先となります。
891 * **OCAML_OTHER_LIBS**
893 リンカに渡す追加ライブラリ。これらのライブラリはリンク作業時に依存先には *含まれません* 。一般的な使用方法としては、OCamlの ``unix`` や ``str`` のような標準ライブラリに用いられます。
899 * **OCAML_LIB_FLAGS**
903 * **ABORT_ON_DEPENDENCY_ERRORS**
905 OCamlのリンカは依存する順番でリストされたOCamlのファイルを必要としています。通常、このセクションにあるすべての関数は ``<files>`` 引数として渡したOCamlのモジュールリストを自動的にソートします。しかし、この変数が ``true`` に設定してある場合、これらの関数に受け渡されたファイルの順番はそのままになります。また、OMakeはこの順番が正しくなかったとしても、生じたエラーメッセージを無視します。
910 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
911 OCaml バージョン 3.09.2に関しては、標準の ``ocamldep`` スキャナは『壊れています』。これに関しての主な問題は、既に存在している依存関係しか検索しないという点です。例えば、 ``foo.ml`` が ``Bar`` に依存しているものとしましょう。 ::
916 この場合、ファイル ``bar.ml`` あるいはインクルードパス上の ``bar.ml`` が存在しているときには、デフォルトの ``ocamldep`` はそのファイルの依存関係しか調べません。つまり、もし ``ocamldep`` を走らせた時点では ``bar.mly`` しか存在しなかったとしたら、たとえ ``bar.ml`` と ``bar.mli`` が ``bar.mly`` から生成されたとしても、これらの依存関係は調べない(あるいは出力しない)のです。
918 現状のOMakeでは、この問題を解決するための2つの方法を提供しています。一つは生成されるファイルを手動で指定してあげることです。二つめは実験的な方法ですが、自動的に『隠れた』依存関係を調査することです。 ``OCAMLDEP_MODULES_ENABLED`` 変数はどちらの方法を使うのか、制御する変数です。この変数が偽であるときには、手動で指定するという方法が期待されます。また、真であるときには、自動的な調査を試みます。
921 single: OCamlGeneratedFiles()
922 single: LocalOCamlGeneratedFiles()
925 13.6.5.1 OCamlGeneratedFiles, LocalOCamlGeneratedFiles
926 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
929 OCamlGeneratedFiles(files)
930 LocalOCamlGeneratedFiles(files)
932 ``OCAMLDEP_MODULES_ENABLED`` 変数が ``false`` に設定してある場合、 ``OCamlGeneratedFiles`` と ``LocalOCamlGeneratedFiles`` 関数は任意のOCamlファイルが依存関係をスキャンする前に、生成される必要のあるファイルを指定します。例えば、 ``parser.ml`` と ``lexer.ml`` の両方が生成されるファイルであった場合、以下のように指定します。 ::
934 OCamlGeneratedFiles(parser.ml lexer.ml)
936 ``OCamlGeneratedFiles`` 関数は *グローバル* です。この関数の引数は、プロジェクト上の任意の場所にある任意のOCamlファイルの依存関係をスキャンする前に生成されます。 ``LocalOCamlGeneratedFiles`` 関数はOMakeの通常のスコープルールに従います。
938 これらの関数は ``OCAMLDEP_MODULES_ENABLED`` 変数が真であるときにはなんの影響も与えません。
942 13.6.5.2 依存関係の解析中に生成されるファイルを自動的に調査
943 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
944 OMakeが自動的に調査してくれるときに、いちいち手動で生成されるファイルを指定してあげるのは明らかに最適とは言えません。まずこれについて話すために、ファイルの自由なモジュール名 *のみ* を探しだす ``ocamldep`` について話し、その後内部でその結果を後処理することを伝えました。
946 この自動的な機構は ``OCAMLDEP_MODULES_ENABLED`` 変数が ``true`` に設定されているときに許可されます。通常、 ``OCAMLDEP_MODULES_ENABLED`` 変数は ``$(OCAMLDEP_MODULES_AVAILABLE)`` に設定されています。
948 この処理に依存している ``ocamldep`` の機構はバージョン3.10のOCamlかそれ以降のみに含まれています。一時的に、私たちは ``ocamldep`` を似せて修正したバイトコードバージョンの ``ocamldep-omake`` を用意しました。この似せて作った ``ocamldep`` は自動的に依存関係を調査してくれます。詳細は ``OCAMLDEP_MODULES_AVAILABLE`` と ``OCAMLDEP_MODULES`` 変数の項を参照し、さらにこれらの変数を正しく設定し、利用してください。
954 13.6.6 Menhirパーサジェネレータを使用
955 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
956 Menhirは ``ocamlyacc`` とほとんど互換性がとれており、かつ様々な改良がなされているパーサジェネレータです。機能の一部を以下にリストします(さらに知りたい方はMenhirのホームページ http://cristal.inria.fr/~fpottier/menhir/ を参照してください)。
958 * Menhirの解釈(explanations)は、多くの人間が分かりやすくなるように改良されています。
959 * Menhirは複数のファイルにわたって文法を記述できます。これはまた、トークンの集合を複数のgrammerが共有できることを意味しています。
960 * MenhirはObjective Camlモジュールによって記述されたパーサを提供することができます。
961 * jyhによって ``-infer`` オプションが追加されました。これによって、Menhirは生成時にあなたの文法における意味動作(semantic actions)をチェック(typecheck)することができます。
963 (訳注: 見ての通り、訳が安定していません。すいませんがあまり信用しないでください)
965 どのようにして ``ocamlyacc`` の代わりにMenhirを使用できるのでしょうか?
967 1. あなたのプロジェクトの適切な位置(Menhirをどこでも使いたいのならプロジェクトトップの ``OMakefile`` )に、以下の定義を追加してください。 ::
969 MENHIR_ENABLED = true
970 2. 必要ならば、Menhirに追加させたいオプションを ``MENHIR_FLAGS`` に追加してください。 ::
972 MENHIR_FLAGS += --infer
974 このセットアップによって、任意の ``.mly`` 拡張子のファイルはMenhirでコンパイルされます。
976 もしあなたの文法(grammar)がいくつかのファイルにわたって分割されているのなら、あなたは ``MenhirMulti`` 関数を用いて、そのことを明示的に指定してあげる必要があります。 ::
978 MenhirMulti(target, sources)
979 target : 拡張子を除いたファイル名
980 sources : 拡張子を除いた、文法を定義しているファイル群
982 例えば、文法を指定しているファイル ``a.mly`` と ``b.mly`` からパーサファイル ``parse.ml`` と ``parse.mli`` を生成したい場合は、以下のように記述します。 ::
984 MenhirMulti(parse, a b)
987 single: OCamlLibrary()
990 13.6.6.1 OCamlLibrary
991 """"""""""""""""""""""""""""""""""""""
992 ``OCamlLibrary`` 関数はOCamlライブラリをビルドします。 ::
994 OCamlLibrary(<libname>, <files>)
996 ``<libname>`` と ``<files>`` は拡張子を *付けないで* 指定してください。
998 この関数はルールを定義しているすべてのターゲットのリスト( ``NATIVE_ENABLED`` が設定されているときは ``$(name)$(EXT_LIB)`` を含む)を返します。
1000 以下のコードは( ``NATIVE_ENABLED`` が設定されている場合は) ``foo.cmx`` と ``bar.cmx`` から ``libfoo.cmxa`` ライブラリをビルドし、( ``BYTE_ENABLED`` が設定されている場合は) ``foo.cmo`` と ``bar.cmo`` から ``libfoo.cma`` をビルドします。 ::
1002 OCamlLibrary(libfoo, foo bar)
1005 single: OCamlPackage()
1008 13.6.6.2 OCamlPackage
1009 """"""""""""""""""""""""""""""""""""""
1010 ``OCamlPackage`` 関数はOCamlパッケージをビルドします。 ::
1012 OCamlPackage(<name>, <files>)
1014 ``<name>`` と ``<files>`` は拡張子を *付けないで* 指定してください。 ``<files>`` はOCamlコンパイラに ``-for-pack <ident>`` フラグを加えた状態でコンパイルされます。
1016 この関数はルールを定義しているすべてのターゲットのリスト( ``NATIVE_ENABLED`` が設定されているときは ``$(name)$(EXT_LIB)`` を含む)を返します。
1018 以下のコードは( ``NATIVE_ENABLED`` が設定されている場合は) ``foo.cmx`` と ``bar.cmx`` から ``package.cmx`` パッケージをビルドし、( ``BYTE_ENABLED`` が設定されている場合は) ``foo.cmo`` と ``bar.cmo`` から ``package.cmo`` をビルドします。 ::
1020 OCamlPackage(package, foo bar)
1023 single: OCamlLibraryCopy()
1026 13.6.6.3 OCamlLibraryCopy
1027 """"""""""""""""""""""""""""""""""""""
1028 ``OCamlLibraryCopy`` 関数はライブラリをインストール先にコピーします。 ::
1030 OCamlLibraryCopy(<tag>, <libdir>, <libname>, <interface-files>)
1032 ``<interface-files>`` では ``INSTALL_INTERFACES`` 変数が真である場合にコピーする、追加のインターフェイスファイルを指定します。
1035 single: OCamlLibraryInstall()
1038 13.6.6.4 OCamlLibraryInstall
1039 """"""""""""""""""""""""""""""""""""""
1040 ``OCamlLibraryInstall`` 関数はライブラリをビルドし、加えてインストール先にコピーします。 ::
1042 OCamlLibraryInstall(<tag>, <libdir>, <libname>, <files>)
1045 single: OCamlProgram()
1047 single: OCAML_OTHER_LIBS
1049 single: OCAML_BYTE_LINK_FLAGS
1050 single: OCAML_NATIVE_LINK_FLAGS
1051 single: OCAMLE_LINK_FLAGS
1054 13.6.6.5 OCamlProgram
1055 """"""""""""""""""""""""""""""""""""""
1056 ``OCamlProgram`` 関数はOCamlプログラムをビルドします。この関数はルールを定義している、すべてのターゲットの配列を返します( ``$(name)$(EXE)`` , ``$(name).run`` ``$(name).opt`` は ``NATIVE_ENABLED`` と ``BYTE_ENABLED`` 変数の値に依存しています)。 ::
1058 OCamlProgram(<name>, <files>)
1064 リンカに渡す追加ライブラリ(拡張子を除く)。これらのファイルは対象のプログラムの依存先となります。
1066 * **OCAML_OTHER_LIBS**
1068 リンカに渡す追加ライブラリ(拡張子を除く)。これらのファイルは対象のプログラムの依存先に *なりません* 。
1074 * **OCAML_BYTE_LINK_FLAGS**
1078 * **OCAML_LINK_FLAGS**
1083 single: OCamlProgramCopy()
1084 single: NATIVE_ENABLED
1087 13.6.6.6 OCamlProgramCopy
1088 """"""""""""""""""""""""""""""""""""""
1089 ``OCamlProgramInstall`` 関数はOCamlプログラムをインストール先にコピーします。 ::
1091 OCamlProgramCopy(<tag>, <bindir>, <name>)
1095 * **NATIVE_ENABLED**
1097 ``NATIVE_ENABLED`` 変数が設定されている場合、ネイティブコードの実行形式がコピーされます。そうでない場合はバイトコードの実行形式がコピーされます。
1100 single: OCamlProgramInstall()
1103 13.6.6.7 OCamlProgramInstall
1104 """"""""""""""""""""""""""""""""""""""
1105 ``OCamlProgramInstall`` 関数はプログラムをビルドし、加えてインストール先にコピーします。 ::
1107 OCamlProgramInstall(<tag>, <bindir>, <name>, <files>)
1112 --------------------------------------
1113 OMakeではLaTeXドキュメントのビルドをサポートします。このサポートには自動的にBiBTexを実行させ、PostScriptやPDFファイルを生成するためのサポートも含まれます。このセクションで列挙している関数を使うためには、まずあなたの ``OMakeroot`` ファイルに、以下の一行を追加してください。 ::
1119 single: TETEX2_ENABLED
1126 single: DVIPDFMFLAGS
1128 single: PDFLATEXFLAGS
1133 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1134 以下の変数があなたのプロジェクト上で編集できます。
1138 LaTeXコマンド(デフォルトは ``latex`` )
1140 * **TETEX2_ENABLED**
1142 TeTeX v.2にある、発展的なLaTeXオプションを利用するかどうかを示すフラグです(デフォルトの値は最初にomakeが ``LaTeX.src`` を読み込むことで決定され、さらにインストールしてあるLaTeXのバージョンに依存します)。
1146 LaTexのフラグ(デフォルトの値は ``TETEX2_ENABLED`` 変数に依存する)
1150 BibTeXコマンド(デフォルトは ``bibtex`` )
1154 索引をビルドするコマンド(デフォルトは ``makeindex`` )
1158 ``.dvi`` からPostScriptに変換するコンバータ(デフォルトは ``dvips`` )
1162 ``dvips`` に渡すフラグ(デフォルトは ``-t letter`` )
1166 ``.dvi`` から ``.pdf`` に変換するコンバータ(デフォルトは ``dvipdfm`` )
1170 ``dvipdfm`` に渡すフラグ(デフォルトは ``-p letter`` )
1174 ``.latex`` から ``.pdf`` に変換するコンバータ(デフォルトは ``pdflatex`` )
1178 ``pdflatex`` に渡すフラグ(デフォルトは ``$`(LATEXFLAGS)`` )
1182 ``.pdf`` ドキュメントを生成するのにdvipdfmではなくpdflatexを使うかどうかを示すフラグ(デフォルトは ``false`` )
1186 13.7.2 LaTeXドキュメントのビルド
1187 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1190 single: LaTeXDocument()
1196 13.7.2.1 LaTeXDocument
1197 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1198 ``LaTeXDocument`` 関数はLaTeXドキュメントを生成します。 ::
1200 LaTeXDocument(<name>, <texfiles>)
1202 ``<name>`` と ``<texfiles>`` には拡張子を *付けないで* 指定してください。この関数は生成された ``.ps`` と ``.pdf`` ファイルのファイル名を返します。
1208 LaTeXの検索パス(ディレクトリの配列で、デフォルトは ``TEXINPUTS`` 環境変数から取得される)
1212 このドキュメントに依存している追加ファイル
1216 OMakeの ``TEXINPUTS`` 変数の値に基づいてアップデートすることになっている、環境変数の名前の配列。デフォルトは ``TEXINPUTS BIBINPUTS BSTINPUTS`` 。
1219 single: TeXGeneratedFiles()
1220 single: LocalTeXGeneratedFiles()
1223 13.7.2.2 TeXGeneratedFiles, LocalTeXGeneratedFiles
1224 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1227 TeXGeneratedFiles(files)
1228 LocalTeXGeneratedFiles(files)
1230 ``TeXGeneratedFiles`` と ``LocalTeXGeneratedFiles`` 関数は任意のLaTeXファイルの依存関係をスキャンする前に生成される必要のあるファイルを指定します。例えば、 ``config.tex`` と ``inputs.tex`` が両方とも生成されるファイルであった場合、以下のように指定します。 ::
1232 TeXGeneratedFiles(config.tex inputs.tex)
1234 ``TeXGeneratedFiles`` 関数は *グローバル* です。この関数で指定したファイルは、任意の場所にある任意のTeXファイルの依存関係をスキャンする前に生成されます。 ``LocalTeXGeneratedFiles`` 関数はOMakeの通常のスコープルールに従います。
1237 single: LaTeXDocumentCopy()
1240 13.7.2.3 LaTeXDocumentCopy
1241 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1242 ``LaTeXDocumentCopy`` 関数はインストール先にドキュメントをコピーします。 ::
1244 LaTeXDocumentCopy(<tag>, <libdir>, <installname>, <docname>)
1246 この関数は ``.pdf`` と ``.ps`` ファイルだけコピーします。
1249 single: LaTeXDocumentInstall()
1252 13.7.2.4 LaTeXDocumentInstall
1253 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1254 ``LaTeXDocumentInstall`` 関数はドキュメントをビルドし、加えてインストール先にドキュメントをコピーします。 ::
1256 LaTeXDocumentInstall(<tag>, <libdir>, <installname>, <docname>, <files>)