このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

ロクでもない用語法

あまりの酷さに、ほんとにムカムカしてきた。

  • 公式マニュアルでは、ゴールとターゲットが区別されているが、通常は区別されない。ターゲットは構文上の概念。ゴールは実行時の動的概念。違う!!
  • ルール内での役割としてのターゲット(左辺)と、依存関係グラフにおける非湧き出しノードがある。(ここではビルドフローの流れに対して湧き出しと吸い込みを考えている。)二者は違う概念。
  • 有向グラフのトポロジーからは、(フローの)湧き出しノードと中間ノードと吸い込みノード=シンクノードがある。
  • 非ターゲットノード(ソースノード)と湧き出しノードは異なる概念。ターゲットである湧き出しノードが存在する。
  • つまり、湧き出しノードが(ルールの)ターゲットになることがあるのだ。この場合は、ノードはタスクを意味することが多い。
  • 非ソース=ターゲットである湧き出しノードは、稀に、一度だけ作るファイル(例:README.md, .gitignor)のこともある。そのレシピは一度だけ作る作り方。
  • ターゲットである湧き出しノードにレシピがないことは許される(エラーにならない)。レシピなしは一般的に許されることだ。
  • ターゲットである湧き出しノードに空レシピは許される。(一般的に許される)

「レシピがない」の意味も色々ある。

  • 特定の(構文上の)ルールにレシピがないのは特に問題ではない。同じターゲットを持つ他のルールからレシピが供給されるかも知れない。
  • 特定のターゲットに対して、どのルール(パターンルール含む)からもレシピが供給されないなら、そのターゲットにレシピはない。Makeはエラーとは考えない
  • ターゲットは空なレシピを持つことができる。空なレシピはパターンルールからのレシピの供給を排除できる。が極めて奇妙な挙動を誘発する(別に書く→ ロクでもない仕様とロクでもないメッセージ:レシピがないとき - 檜山正幸のキマイラ飼育記 メモ編)。

あまり考えもなく作ったものを、行き当たりばったりで拡張するとこんなことになるのだろう。一番の悲劇は、他のツールがもっとダメなことだ。