Makefile変数チートシート:自動変数 $@ $< $^ と := = の違い

Makefileを書いていると、$@$< みたいな記号や、=:= の使い分けで手が止まりがちです。この記事は変数まわりだけを逆引きでまとめたチートシートです。挙動はすべて手元の GNU Make で実行して確認しています。

もっと踏み込んだ仕様は GNU Make 4.4 日本語マニュアル 第6章「変数の使い方」 を参照してください。この記事はその逆引き版です。

=:= の違い(ここだけは押さえる)

いちばん引っかかるのがこれです。

  • = … 遅延展開。右辺は使うときに評価される。
  • := … 即時展開。右辺はその行を読んだ時点で評価される。

次の Makefile で違いが出ます。

続きを読む Makefile変数チートシート:自動変数 $@ $< $^ と := = の違い

Makefileの条件分岐 ifeq / ifdef 完全ガイド

Makefile で「デバッグビルドのときだけフラグを足したい」「OS ごとにコマンドを変えたい」といった分岐をしたいとき使うのが ifeqifdef です。書き方に少しクセがあるので、実例つきでまとめました。挙動はすべて手元の GNU Make で実行して確認しています。

仕様の詳細は GNU Make 4.4 日本語マニュアル 第7章「Makefileの条件分岐」 を参照してください。この記事はその実例版です。

4つの条件ディレクティブ

ディレクティブ 分岐の条件
ifeq 2つの値が等しい
ifneq 2つの値が等しくない
ifdef 変数が定義されている(空でない)
ifndef 変数が定義されていない(空)

いずれも elseendif で閉じます。else は省略できますが endif は必須です。

ifeq: 値を比較して分岐

続きを読む Makefileの条件分岐 ifeq / ifdef 完全ガイド

GNU Make を24年越しに更新


ひさしぶりに、まとまった翻訳作業をふたつ仕上げた。ひとつは GNU Make マニュアルの全面更新、もうひとつは ImageMagick 公式ドキュメントの日本語訳だ。どちらも「日本語でちゃんと読めるリファレンスが欲しい」という、自分自身の不満から始めている。

GNU Make を24年越しに更新

このサイト(ecoop.net) には昔から GNU Make の日本語訳 を置いている。バージョンは 3.77、原典は 1998年5月のもので、訳を仕上げたのが 2002年。かれこれ20年以上、ずっとそのままだった。

その間に GNU Make 本体は止まらず進化していて、最新は 4.4。3.77 の頃とは用語からして変わっている。

  • かつて commands と呼んでいたルールの実行内容は recipe(レシピ) に、dependencyprerequisite(前提条件) に改称された
  • グループ化ターゲット &:、順序のみ前提条件 |.EXTRA_PREREQS、即時展開代入 :::=!=(shell代入)など、新しい文法がいくつも増えた
  • $(file ...)$(eval)$(let)$(intcmp) といった関数、Guile 連携や動的オブジェクトのロード、ジョブサーバ、出力同期(-O)など、機能面も大きく広がった

要するに、20年前の訳はもう「現役のリファレンス」としては古すぎた。そこで 4.4 を一から訳し直すことにした。28年前(1998年)のマニュアルを、ようやく現在に追いつかせた格好だ。

旧訳のテイストは残す

ただ、ただ新しく訳せばいいというものでもない。旧 3.77 訳には、直訳ではなく日本人が読んで自然に理解できるように噛み砕いた意訳という、当時のこだわりがあった。新訳でもそのテイストは引き継ぎたかった。

そこで今回は、訳を始める前に 翻訳辞書(用語集)文体スタイルガイド を先に整備した。

  • ページをまたいで同じ英語が違う訳語にならないよう、target=ターゲット prerequisite=前提条件 recipe=レシピ … と用語を固定
  • 「です・ます調」「段落頭の全角スペース」「読者中心の意訳」「必要なら訳注で補足」といった文体ルールを明文化

全16章+付録A〜Dを、この基準に沿って訳した。旧 3.77 訳も消さずに残してあるので、見比べてもらってもいい。

GNU Make 4.4 日本語訳(新訳)

なお付録D(GFDL)は、ライセンス文書の性質上、英語の原文だけが正式に有効なので、原文をそのまま正本として載せ、日本語は説明の注記にとどめている。

ImageMagick日本語情報サイト公開

ついでに。というには規模が大きいが、もうひとつ密かに勧めていたプロジェクトのほうも公開した。 ImageMagick だ。画像変換の定番ツールで、コマンドラインからほぼ何でもできる。実際とても便利なのだが、まとまった日本語情報がとにかく少ない。断片的なブログ記事はあっても、リファレンスとして通して読めるものが見当たらない。

一方で、公式ドキュメントはかなり充実している。コマンドラインオプション、各種フォーマット、色管理、アーキテクチャ解説まで揃っている。これだけ良い原典があるなら、訳さない手はない——というのが動機だ。

そこで、公式ドキュメントを翻訳して通読できる形にした。日本語を主軸にしつつ、本家が対応していない多言語(英・中・西・仏・葡)へも展開している。日本語だけで 58ページほどある。

ImageMagick ドキュメント日本語訳

こちらは ImageMagick Studio LLC とは無関係の非公式翻訳なので、各ページに帰属表示・非公式である旨・原文へのリンクを必ず添えている。正確な情報が要るときは原文を参照してほしい。ライセンスページも、正文は英語原文を保持して要約だけを参考訳にしてある。

おわりに

どちらも「英語で読めば済む」と言われればそれまでだが、母語でスッと頭に入る一次資料があるのとないのとでは、学習や調べ物のしやすさがまるで違う。自分が欲しかったものを作った、というのが正直なところだ。

訳の誤りや読みにくい箇所に気づいたら、ecoop.net まで教えてもらえると助かります。