最上位階層にある Makefile が lib* 形式のディレクトリに配置される全てのライブラリと プログラム・ディレクトリのサブ・ディレクトリ中の全プログラムを自動的に構築します。 この作業を正常に行なう為には、適切なファイルの準備とターゲットの作成が必要です。 それぞれのライブラリは、その上位階層ディレクトリに Make.header と Make.files という ファイルを作成しなければなりません。Make.header ファイル中の一番最初のターゲットが" ディフォルト"になり、static もしくは shared、または両方のライブラリを構築します。 J_BUILD_SHARED_LIB が定義されていない場合、static バージョンのライブラリのみを作成し、 J_NEED_SEPARATE_O_FILES が定義されている場合、shared バージョンのライブラリのみを作 成します。さもなければ、両方のバージョンが作成されます。スーパーユーザ(su/root)でイ ンストールが行われた場合、"ディフォルト"では、${JX_LIB_ROOT}/ ディレクトリへ構築され たライブラリがコピーされます。"jxuninstall"のターゲットは、このティレクトリからライ ブラリを削除します。"ディフォルト"の指定は込み入っており、include/make/default_lib _target のファイルにこの内容に関する実装が行われております。このファイルの使用方法は、 libjcore/Make.header と libjx/Make.header ファイルを用例として参照して下さい。 Make.header は、各サブディレクトリの Makefile を作成する為のターゲット"Makefile"を 作成しなければなりません(例えば、テストの為のMakefile)。Make.header は、これらのサブ ディレクトリをクリーンにする為に、:(ダブル・コロン)ターゲットとして"tidy"と"clean"も 定義します。ソースの配布には、ライブラリの最上位ディレクトリ上に、static と shared 両バージョン・ライブラリの場所を示すシンボリック・リンクと、ライブラリのヘッダー・ ファイルの場所を指示するインクルード・ディレクトリのシンボリック・リンクも含めます。 JParser と J3D ライブラリが、これを示す良い例となります。 どのプログラムも、その上位階層ディレクトリに、Make.header と Make.files というファイ ルを作成しなければなりません。この場合、Make.header は、各サブディレクトリに Makefile を作成するためのターゲット"Makefile"、プログラムのビルド、ストリップ、及び ${JX_INSTALL_ROOT}/ への配置を行なうターゲット"jxinstall"、そのディレクトリ からプロ グラムを削除するターゲット"jxuninstall"を含めて作成します。ユーザーの利便性を考慮し、 Make.header の最初のターゲットを"ディフォルト"とし、初めに必要とされるライブラリ、 そしてそのプログラムがビルドされます。これは、静的リンク・バージョンのバイナリを構築 するためのターゲット"static"を作成するのに便利です。他のプラットフォームへのバイナリ 配布を簡単にする為にも、Make.header に、ターゲット"shared"と 動的リンクされた実行 ファイルとリンク・キットを含んだ tar ファイルを作成するための"link"を、別々に定義して おきます。サブディレクトリ中に Makefile が存在するのであれば、Make.header に、これらの サブディレクトリをクリーンにする為、:(ダブル・コロン)ターゲットとして"tidy"と"clean"も 定義しておきます。Code Crusader が、これらの全ての方法を示す用例を提供します。 Make.header ファイルの例を見て頂くと、後述の J_DISTR_TAR_DIR などのように、多様に 要求されるターゲットに対して必要とされるシステム非依存定数を定義するための include/ make/jx_constants と include/make/jx_config.jx_constants ファイルが読み込まれるのに 気づかれると思います。変数 LOADLIBES を使用するのにふさわしい -l 引数を展開する ljcore や ljx などの変数を定義します。jx_constants は、jx_constants 自身が読み込まれ る前に、JX_ROOT が定義されていなければなりません。jx_config は、システム非依存定数を 定義します。面白いものとしては、前述のような各ライブラリ毎に Make.header が使われる J_BUILD_SHARED_LIB と J_NEED_SEPARATE_O_FILES でしょう。 ユーザーの利便性と非互換バージョンが決してリンクされないようにするには、全てのライブ ラリとプログラムは、J_DISTR_TAR_DIR を定義し、JX のメイン・ディレクトリの上位ディレ クトリから圧縮を行ないます。こうすることにで、ユーザーは、全ライブラリとプログラムを そのソース側へダウンロードし、同じディレクトにその tar ファイルを解凍し、"make"コマ ンドにより、全てを構築することが出来ます。