[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
さまざまなシステムにおけるmake
プログラムは、GNU make
に
インプリメントされていないいくつかの機能をサポートしています。ただし、
POSIX.2標準(IEEE Standard 1003.2-1992)では、それらの機能を
必要とはしていません。
この機能はGNU make
には入れられませんでした。理由は、
アーカイブシンボルのテーブルの内部書式のせいで、make
に
その知識を与える際の非モジュール性があるからです。
See section アーカイブシンボルディレクトリのアップデート.。
make
では特別な意味を持ち、‘~’なしのファイルに一致した
SCCSファイルを参照します。たとえば、サフィックスルール‘.c~.o’は
SCCSファイル‘s.n.c’からファイル‘n.o’を作成します。
全体の網羅のためには一連のサフィックスルールが必要です。
See section 古いスタイルのサフィックスルース.。
GNU make
においては、この全体の一連のケースは、ルールの連鎖の汎用的
な機能の組み合わせにより、SCCSファイルからの展開に対する2つの
パターンルールで処理されます。
See section 暗黙のルールの連鎖.。
make
においては、文字列‘$$@’は奇妙な意味を持ち、
複数のターゲットを持つルールの必要条件において、処理される特定のターゲットを
意味します。
‘$$’は通常の‘$’としてみなされるため、GNU make
ではこのよう
な定義がされていません。
静的なパターンルール(see section 静的なパターンルール.)の
使用を通してこの機能の部分的なものを得ることができます。
System Vのmake
のルールの、
$(targets): $$@.o lib.a |
は、GNU make
の静的なパターンルールでは以下のように置き換えられます。
$(targets): %: %.o lib.a |
make
では、VPATH
サーチ
(see section 必要条件のためのディレクトリサーチ.)で
発見されるファイルはコマンド文字列で変更された名前を持ちます。しかし、
つねに自動変数を使用したほうがよりわかりやすいと思われ、この機能は
時代遅れだと思われます。
make
によっては、ルールの必要条件に現われる自動変数$*
が、
そのルールのターゲットのフルネームに展開してしまうという驚異的な機能を
持つ場合があります。しかし、Unixのmake
開発者の精神からはこれが
どんな意味を持つのかわかりません。$*
の通常の定義とまったく
整合性がないと感じます。
make
によっては、暗黙のルール
(see section 暗黙のルールの使用.)によるサーチがコマンドの
ないもの以外にもすべてのターゲットに対して行なわれるようです。これは
以下のようなことが可能という意味です。
foo.o: cc -c foo.c |
この例では、Unixのmake
は‘foo.o’が‘foo.c’に依存していると
直感してしまうでしょう。
このような用法は破綻すると考えられます。make
の必要条件の属性は
明確に定義されていて(少なくともGNUのmake
では)、そのような使用法は
モデルに適合しないのです。
make
はEFLプログラムのコンパイル、あるいはプリプロセスに対する
組み込み済みの暗黙のルールを含みませんが、EFLを使用するユーザーがいたら、
それを喜んで追加します。
make
では、サフィックスルールの指定はコマンドなしで行なわれ、
空のコマンド(see section 空のコマンドの使用.)であるかのように
扱われます。たとえば、
.c.a: |
は、組み込み済みの‘.c.a’サフィックスルールをオーバーライドします。
コマンドなしのルールに対しては、ターゲットに対する必要条件のリストに単純に
追加する方法が、よりわかりやすいと考えます。したがって、上記の例は、GNUの
make
では以下のように書き換えることができます。
.c.a: ; |
make
のバージョンによっては、‘-k’
(see section プログラムのコンパイルテスト.)のない場合には
‘-e’フラグでシェルを呼び出します。‘-e’フラグは、シェルに対して
実行していたプログラムをゼロ以外のステータスを返してただちに終了するように
指示します。特別な取り扱いを必要とせず、それ自身で完結するような個々の
シェルコマンド行を記述するほうがわかりやすいと思います。
[ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は新堂 安孝によって2009年9月22日にtexi2html 1.82を用いて生成されました。