sitelogo
minmake

minmakeは、Java/XMLベースのプラットフォーム依存しないmakeツールです。

minmakeは、UNIXのmakeやWindowsのnmakeと同様の目的で使用されます。 そのタスクの内容は、デフォルトでは、minmakeを走らせるディレクトリの中にあるmake.xmlファイルの中で記述されます。

以下は、minmakeで行うプロジェクトの完結した例です。

make.xml - 4つのモジュールのアプリケーションのためのファイル

mdefs.xml - MINERVAプロジェクトのための一般的なルール

usagi.xml - ホスト環境の宣言

make.xmlの記述はXML形式で行い、次のような構文にします。

make.xml
	<make [default="DefaultRule"]>
		(Include)*
		(Var)*
		(Rule|GenRule)*
	</make>

Include <include>Filename</include>

Var <var> <name>VariableName</name> (Value)* </var>

Value <value>SomeText</value>

Rule <rule> Target (Dep)* (Body|Comment)* </rule>

GenRule <genrule> Target (Dep)* (Body|Comment)* </genrule>

Target <target>TargetName</target>

Dep <dep>Dependency</dep>

Comment <comment>SomeText</comment>

Body <body [dir="WorkingDirectory"] [input="Filename"] [output="Filename"] [append="Filename"] >SomeCommand</body>

パス、コマンド、コメントはすべて変数を持つことができます。 変数は、$(VariablenName) という形で参照されます。 変数を使用するために予めVar部分で定義せねばなりません。 変数HOSTNAMEは、予め定義され、minmakeが呼ばれるマシンの ホストネームを出力します。 これにより、例えば、特別なマシンに対して 特別に付け加えられるルールや変数(例えば、システム関連ディレクトリの ある場所などについて)を定義することができます。

<include>$(HOSTNAME).xml</include>

の中で定義します。)

また、変数を参照する際に、変数の中身の一部を修正することも可能です。 例えば、

	$(Variable:.old-suffix=.new-suffix)
という形で使います。
	$(V:.min=.mbc)
で、変数Vの拡張子を.minから.mbcに置換えることなどが可能です。

パスの指定やコマンド、コメントは、GenRuleの中でワイルドカードを 持つこともできます。ここでは、従属部分で、*マークは、ワイルドカード として使われます。

*が右から左へと現れるたびに、*の付けられた部分はカウントされ、コメント あるいはボディ部分で、$i (i in 1-9) という形式で参照されます。

例:MINERVAファイルのコンパイルのルール

	<genrule>
		<target>mbc</target>
		<dep>1.min</dep>
		<comment>compile $1.min</comment>
		<body>$(MINERVAC) $1.min</body>
	</genrule>

このルールでは以下のことが定義されています。
*.mbcの拡張子を持つファイルは、*.minを持つ同じ前の名前を持つファイルに 依存します。コンパイルの前に、minmakeは、"compile <Datei>min"という コメントを出力します。コンパイル自体は、"$(MINERVAC) <Filename>min" というコマンドで行われ、$(MINERVAC)は、その前に定義されていた変数です。

個々の説明

Var(変数)部分で、変数は定義されます。例えば、
	<var>
		<name>JAVA</name>
		<value>jview d:/nologo=true /cp:a</value>
	</var>

<var> <name>MINERVA_HOME</name> <value>c:\minerva</value> </var>

<var> <name>MINERVAC</name> <value>$(JAVA) $(MINERVA_HOME) com.ifcomputer.minerva.Application -c $(MINERVA_HOME)/minerva.mca</value> </var>

変数は一つ以上の値を持つことができます。

	<var>
		<name>SOURCE</name>
		<value>data-1.min</value>
		<value>data-2.min</value>
		<value>data-3.min</value>
	</var>
	

ここで、個々の値域の内包する変数の値は、間にスペースを一つづつはさんで出力 されます。 上の例では、

SOURCE="data-1.min data-2.min data-3.min"

として出力されます。

Ruleの部分では、ルールが定義されます。これらのルールは必要に応じて、 minmakeによって処理されます。(これは、makeで知られているのと類似の働きです。) Ruleは、特別なファイルのためのみのルールを出力します。(それゆえに、ターゲット 部分で*のワイルドカードを使用することはできません。) ルールは、body部分を持ちません。この場合、これに従属するルールを定義せねばなり ません。 GenRuleとRuleが存在する場合、特別なルールであるRuleのみが処理されます。 しかし、body部分を持たないdep部分においては、常に、すべてのrule/genruleのルールが処理されます。

ルールは、いくつかの属性のオプションを持ちます。 "input"属性は、与えられたファイルが、コマンドのための標準インプットとして 使われることを意味します。 "output"属性は、コマンドの標準出力が、指定されたファイルに回される ことを意味します。 "append"属性は、コマンドの標準出力が、与えられたファイルに追加される ことを意味します。 "dir"属性は、コマンドが与えられたディレクトリで行われることを意味します。 (これは、再帰的なmakeファイルの場合、特に重要です。) 例えば、

		<rule>
			<target>all</target>
			<body dir="lib">$(MAKE) all</body>
			<body dir="kernel">$(MAKE) all</body>
			<body dir="bips">$(MAKE) all</body>
		</rule>
このコマンドは、bin, kernel, libのディレクトリへ行き、そこで、再びmakeを実施 します。

minmakeは、以下のコマンドライン引数も持ちえます。

-f <Filename>
指定されたminmakeファイルを呼び出します。 (デフォルトはmake.xml)
Name=Value
変数Nameを値Valueに置換えます。
Target
活性化されるべきルール。(デフォルトは、"default"属性によって、makeから決められます。) minmakeは、一つ以上のターゲットによって呼ばれることができます。ターゲットがない場合、"default"属性で出力されるターゲットが処理されます。この属性が定義されていない場合であって明確にターゲットが与えられていない場合h、ターゲット"all"が処理されます。

minmakeには、一連の予め設定されたコマンドがあります。予設定された コマンドは、通常のコマンドと同様に使用されます。予設定されたコマンドは、 オペレーティングシステムへの依存性を消すので有効です。

以下の予設定されたコマンドがあります。

del <File> ...
指定されたファイルはすべて、(ディレクトリの場合は再帰的に)消去されます。

copy <File> ... <Directory>
複数のファイルを(ディレクトリの場合は再帰的に)Directoryディレクトリにコピーします。
copy <File1> <File2>
File1はFile2にコピーされます。

move <File1> <File2>
File1はFile2に名前が変わります。

mkdir <Directory> ...
Directoryを作ります。(まだない場合) ここで、全ての必要な中間ディレクトリが作られます。 (例えば、"mkdir a/b/c"とだけ書けば十分です。 "mkdir a a/b a/b/c"と各必要はありません。)

echo Text
Textを出力します。

cat <File> ...
すべての指定されたファイルが、連続して標準出力に出力されます。ファイルを転送するために、"output"あるいは"append"の属性が使用されねばなりません。例えば、 <body output="res.txt">cat file1.txt file2.txt file3.txt</body>のように 使われます。

cat以外の全ての内蔵述語では、body内の属性は無視されます。 dir属性は、すべての内蔵コマンドで無視されます。


戻る 続く..
冒頭へ managed with ubiCMS