ディレクトリモデル
あなたが開発を進めているツール my_tool では、hello.c と utils.c があるとものとします.
hello.c 内には main関数があり、その他のCファイル( この例では utils.c しかありませんが )は、 hello.c から使うサブルーチンなどが格納された補助的なCファイル群とします.
次に、以下のようなディレクトリ構造のモデルを考えましょう.
そしてあなたの my_tool ディレクトリはこのモデルの配下に内包されていると考えます.
しかし競合するその他の同様のツールと比べればはるかに単純ともいえます.
必要なツールはすべてmy_project/mkfsysディレクトリ一つに比較的小さなサイズで収まっており、 従ってこの辺りが必要にして十分な考えられ得る最小モデルではないでしょうか?
mkfgenツールによって生成されるMakefileは、この例では windows用(vc、mingw、msys)、linux用(gcc)、cygwin用(gcc)、android用(ndk)の6つであり、 my_project/src/my_tool ディレクトリ内にそのすべてが瞬時に生成されることでしょう.
(例えば、vc用の場合、Makefile_vc.mak といった名前のMakefileになります).
hello.c 内には main関数があり、その他のCファイル( この例では utils.c しかありませんが )は、 hello.c から使うサブルーチンなどが格納された補助的なCファイル群とします.
次に、以下のようなディレクトリ構造のモデルを考えましょう.
そしてあなたの my_tool ディレクトリはこのモデルの配下に内包されていると考えます.
- my_project ディレクトリ
これはあなた専用のプログラム開発用ディレクトリであり、同時にすべてのものの最上層となるトップディレクトリです.
即ちこの配下には、あなたが使うライブラリやツール群(極めて標準的なライブラリやコンパイラは除いて)一式が すべてが格納されているものとします.
Moaiではznk_projectというディレクトリに相当するものと考えていいでしょう.
- my_project/mkfsys ディレクトリ
このディレクトリ内には mkfgen ツールの本体やそれに関係するその他のビルド支援系ファイルが存在します(詳しくは後述).
- my_project/src ディレクトリ
このディレクトリにあなたのソースファイルがすべて格納されているものとします.
つまりあなたがこれまで開発を行ってきた(あるいはこれからも行うであろう)ライブラリやツールのソースファイルです.
mkfgenが生成するMakefileでは、ビルド時にout_dir/$(ABINAME)というサブディレクトリをその場に作成します.
特にライブラリの場合、そのソースディレクトリ配下のout_dirにビルドされたライブラリの実体が格納されるわけです.
即ちこのsrc ディレクトリは生成されたライブラリ群が格納される場をも兼ねています.
znk_projectのすべてのツールとライブラリでは、後述するconfigセクションの my_libs_root において src ディレクトリをこの意味で指定しています.
このようにするメリットは、わざわざ生成したライブラリやヘッダ群を別のインストールディレクトリへ ずらずらとコピーする処理をMakefile内で記述するの省略できるということです.
その分、ビルドサイクルにおけるトータルな時間も短縮されます.
しかし勿論、そのようなコピーを行うようにした方がよい場合もあります.
例えば、mkfgenが提供するプロジェクトモデルの範疇の外にあるツールから、そのライブラリを利用したい場合があります.
mkfgenが生成するMakefileでは、特に汎用性の高い静的ライブラリと動的ライブラリについては、 それぞれslibとdlibというディレクトリ配下へ、一応コピーする処理を行います.
一方、インポートライブラリとヘッダについてはそのようなコピーを行いません.
- my_project/my_tool-vX.Y-platform
このディレクトリはあなたが開発を行ったツール(my_tool)のインストール先です.
実行バイナリやランタイムライブラリ、必要な設定データなど一式が格納されているものとします.
ここで my_tool や X, Y, platform の部分はツールやそのバージョン、プラットフォームなどによって変わる文字列です.
- my_project/my_profile
このディレクトリでは、my_projectにおけるツールが共通して使うプロファイルデータが格納されているものとします.
Moaiで言えば moai_profileディレクトリがこれにあたります.
FirefoxなどにもProfileがありますが、イメージとしてはあれを意識したものです.
これはツールの種類やバージョンを超えて共通して参照される場合もあり得るものとします.
- my_project/src/my_tool ディレクトリ
このディレクトリはsrc配下にあり、あなたが開発を行っているツールmy_toolのソースディレクトリです.
この中に上記のCファイルに加え、mkfgen.myf が存在するものとします.
しかし競合するその他の同様のツールと比べればはるかに単純ともいえます.
必要なツールはすべてmy_project/mkfsysディレクトリ一つに比較的小さなサイズで収まっており、 従ってこの辺りが必要にして十分な考えられ得る最小モデルではないでしょうか?
mkfgenツールによって生成されるMakefileは、この例では windows用(vc、mingw、msys)、linux用(gcc)、cygwin用(gcc)、android用(ndk)の6つであり、 my_project/src/my_tool ディレクトリ内にそのすべてが瞬時に生成されることでしょう.
(例えば、vc用の場合、Makefile_vc.mak といった名前のMakefileになります).