このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

Erlang実験室:続・makeによるビルド

「Erlang実験室:makeによるビルド」で、ErlangアプリケーションをビルドするMakefileを紹介しました。わずかに手直ししたので、修正差分と補足の説明をします。

目的/前提とenv.mk

まず、このMakefileの目的は、複数のアプリケーション/複数の開発者で単一のMakefileを修正しないで使えるようにすることです。複数のアプリケーション/複数の開発者は同一のリビジョン管理システム(リポジトリ・サーバー)を使っている前提です。以下、$LOCAL_DEVをローカル開発ディレクトリ、$REMOTE_DEVをリモートの共有ディレクトリとします。$APPはアプリケーション名(ディレクトリ名でもある)です。

ローカルでは、$LOCAL_DEV/$APP/がアプリケーション開発ディレクトリになります。もちろん、ローカルの環境の違いはあるわけで、それはenv.mkというファイルで吸収します。env.mkを$LOCAL_DEV/$APP/env.mkに置くと、$REMOTE_DEV/$APP/env.mk にコミットされてしまい具合が悪いですね。$LOCAL_DEV/$APP/env.mkをリビジョン管理から外すか、$LOCAL_DEV/env.mkに置いてください。

カスタマイズ用ファイル

以前、カスタマイズをするファイルがいくつもありましたが、集約しました。

ファイル 定義/上書きする変数
$APP/vsn.mk FOO_VSN(アプリケーション名をfooとして)
$APP/app.mk APP_NAMEなど
$APP/src/specific.mk SOURCES, NOT_SOURCESなど

どれも必須ではなく、デフォルトを変更したいときだけ作ったり編集したりします。

overview.edocは自動的に確認

Makefileのなかで、$APP/doc/overview.edocの存在を検出し、危険性を知らせるようにしました。

specific.mkの書き方

specific.mk内で、変数SOURCES, NOT_SOURCES, INCLUDES, NOT_INCLUDESを設定します。ただし、若干の注意が必要です。


SOURCES:=foo.erl bar.erl baz.erl
ではだめで、$(SRC_DIR)/を前置する必要があります。

SOURCES:=$(SRC_DIR)/foo.erl $(SRC_DIR)/bar.erl $(SRC_DIR)/baz.erl

次のようにすると分かりやすいでしょう。


SOURCE_FILES:=foo.erl bar.erl baz.erl
SOURCES:=$(addprefix $(SRC_DIR)/, $(SOURCE_FILES))

その他の修正

hintsというターゲットを追加しました。make -n ターゲットmake print_varsと同様、状況がよくわからない場合や困ったときの助けになります。

doc_clean, print_varsにはアンダスコアを除いたdocclean, printvarsという別名も用意しました(そういう命名が習慣らしいので)。

問題点

以前の問題点は解消されてません(^^; さらに、変数SOURCESなどを定義してもEDocに渡す方法が(いまのところ)ないので、Edocは$APP/src/内のすべてのファイルをドキュメンテーションしようとします。ファイル冒頭に%% @hiddenというEDocコマンドを入れるとドキュメンテーション対象から外れますが、あまりいい方法ではないですね。

Makefile