OCamlの開発環境として Emacs + Merlin + Tuareg を使用しているが、自ファイル以外のモジュールを参照するためには、cmiファイルを生成しなければならなかった。
dune を使用していれば、プロジェクトディレクトリ配下で
$ dune build @check
を実行すれば生成されるのだけど、ファイルの更新でいちいちこれを実行するのは面倒なのでスクリプトを作成した。
Linuxはファイル更新の検知に inotifywaitコマンドがあるのでそれを利用した。
inotifywaitコマンドはinotify-toolsパッケージにあるのでインストールしておく。
$ sudo apt install inotify-tools
スクリプトはこちら。
dune_build_check.sh
#!/usr/bin/env bash
# for test
#set -euo pipefail
USAGE(){
echo "usage: dune_build_check.sh <dir>"
exit 1
}
[ "$#" -eq 0 ] && USAGE >&2
cd "$1"
while : ; do
result=$(find -type f -name '*.ml' -o -name '*.mli' | xargs inotifywait -q -e modify)
if [ $? -eq 0 ]; then
echo "$result"
dune build @check
fi
done
duneコマンド実行後に、再度、監視対象とするmlファイル、mliファイルを取り直しているので、新規ファイル追加時は既存ファイルを一度編集すればよい。
自動でやってくれるようなオプションがduneにありそうに思ったが無さそうだった。
0 件のコメント:
コメントを投稿