ディレクトリを遡ってMakefileを探してそのディレクトリでmakeを実行するmkを作った

Goを書くようになってからなのか、GMOペパボに入ってからなのか、make を実行することが多くなったのですが、makeMakefileがあるディレクトリで実行する必要があります(もしくは -C オプションでMakefileのあるディレクトリを指定)。

ただ、rakenpm に慣れてしまっているからか、ディレクトリ関係なく make を実行してしまい *1、そのたびに make: *** No targets specified and no makefile found. Stop. を突きつけられてしまっていました。

というわけで、ディレクトリを遡ってMakefileを探してそのディレクトリで make を実行するだけのコマンド mk を作りました。

github.com

インストール

go get か Homebrew でインストールできます。

$ go get github.com/k1LoW/mk

or

$ brew install k1LoW/tap/mk

使い方

make の代わりに mk を使うだけです。

$ cat Makefile
hello:
        @echo "Hello make"
$ cd path/to/deep/
$ cat Makeflie
cat: Makefile: No such file or directory

上記のようにMakefileのあるディレクトリでないところで、make を実行してもエラーになりますが

$ make hello
make: *** No targets specified and no makefile found.  Stop.

mk だとディレクトリを遡ってMakefileを探して make を実行できます。

$ mk hello
(in /path/to/deep)
Hello make

alias make='mk' として使ってみようと思います。

*1:rakeやnpmは Rakefileやpackage.jsonディレクトリを遡って探してくれます