STYLE.MAKEFILE(5)

名称
style.Makefile - FreeBSD における Makefile ファイルのスタイルガイド

解説
このファイルは FreeBSD ソースツリーの makefile に好ましいスタイルを明記しています。

•   全ての makefile はファイルの先頭に SCM ID を持ち、それに空行が続きます。

        # $FreeBSD$

•   必要ならば、次に .PATH: が続きます。 “.PATH: ” のように、コロンの後に単一の アスキー スペースが続くように綴ります。 VPATH 変数は使わないでください。

•   特殊変数 ( LIB 、 SRCS 、 MLINKS など) は、作成されるもの、バイナリの構築に使うもの、 バイナリのインストールに使うものの順番で並べます (「作成物順」)。 あるいは構築される順番、つまり主となるプログラム (あるいはライブラリ) に 使うものが先にくるように並べても構いません (「構築物順」)。 一般的な「作成物順」はこうです: PROG/[SH]LIB/SCRIPTS FILES LINKS [NO]MAN MLINKS INCS SRCS WARNS CFLAGS DPADD LDADD 。 一般的な「構築物順」はこうです: PROG/[SH]LIB/SCRIPTS SRCS WARNS CFLAGS DPADD LDADD INCS FILES LINKS [NO]MAN MLINKS 。

•   <bsd.prog.mk> を使い、 PROG と同じ名前の単一のソースファイルである場合は、 SRCS を省略します。

•   <bsd.prog.mk> を使い、 PROG と同じ名前で、セクション 1 のマニュアルページである時は、 MAN を省略します。

•   変数への代入はすべて “VAR=” のように綴ります。 つまり、変数名と = の間には空白を置きません。 可能ならば、値はアルファベット順にソートするようにします。

•   変数を一回だけ設定する (もしくは変数を最初に設定する) 場合に、 += を使うのはやめてください。

•   簡単な makefile で、空行を使うのはやめてください。 しかしより複雑で長いものに対しては、部分的に関連する項目を まとめるために使います。

•   基本的に WARNS は CFLAGS の修飾子ですが、 CFLAGS の前に置きます。 WARNS は重要なものであり、大量の CFLAGS の記述の中で見失わないように、 CFLAGS の後ろではなくて、 CFLAGS の前に置きます。 コマンドラインや /etc/make.conf で上書きできるように、 WARNS は “WARNS?= ” のように綴ります。

•   “NO_WERROR= yes” は使うべきでありません。これは WARNS の目的を無効にしてしまいます。 これはコマンドラインで、かつ特殊な状況でのみ使用されるべきです。

•   CFLAGS は “CFLAGS+= ” のように綴ります。

•   CFLAGS において、 -I の前に -D のリストを置くのは、アルファベット順という点からも、また -D を見やすくする点からも好ましいことです。 -D はしばしば条件つきのコンパイルに影響し、また -I は意外に長くなりがちです。 長い CFLAGS の設定では -D と -I の間で分割します。

•   CFLAGS において、 GCC 的なもの ( -g や -Wall といったもの) を使うのはやめましょう。

•   一般的には VAR= と値の間に、 アスキー タブをひとつ入れます。 値が 9 桁目から始まるようにするためです。 変数名が 9 桁を超える場合は、単一の アスキー スペースで良いです。 また変数名がとても長い場合は、ホワイトスペース無しでも良いです。

•   .include <bsd.*.mk> は最後です。

•   $< や、 $@ といった時代錯誤のものを使うのはやめましょう。 代わりに ${.IMPSRC} か ${.ALLSRC} 、それと ${.TARGET} を使います。

論理的なグループ分けを表現したいために、 上記のいくつかに従わないこともしばしばあります。

使用例
最もシンプルな、プログラムの Makefile です:

    # $FreeBSD$
    PROG=	foo
    .include <bsd.prog.mk>

最もシンプルな、ライブラリの Makefile です:

    # $FreeBSD$
    LIB=	foo
    SHLIB_MAJOR= 1
    MAN=	libfoo.3
    SRCS=	foo.c
    .include <bsd.lib.mk>

関連項目
make(1), style(9)

歴史
このマニュアルページは、 FreeBSD の style(9) マニュアルページと同じソースに影響されています。

バグ
例外を許さないスタイル規則は、ほとんどありません。 多くのスタイルは、 makefile 全体の内容、あるいはその前後の行に 強く依存しています。