のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

Makefileでsourceコマンドが使えなかったときの対処法

どういう問題か?

私はMakefileを使って開発環境構築を自動化したりするのだが、その際にsourceコマンドを実行させるシェルスクリプトを書いた。 そして実行したところ以下のようなエラーが表示され、実行できなかった。

make source command not found

エラートレースを読めば一目瞭然なのだが、ローカルで実行しても問題なくコマンドのパスは通っているようで、ぱっとみ原因がわからなかったがすぐに以下の要因にいたった。

原因

Makeの処理ではシェルスクリプトが使われるが、それが/bin/shになってしまっていたことが問題だった。

解決法

/bin/bashを使うようにMakeに教えて上げる。 具体的には以下をMakefile冒頭に記載することで解決する。

SHELL=/bin/bash
...//Makeの処理 

最後に

Makeはこの他にも各行が異なるプロセスで処理されたり(環境変数が引き継げない)等のハマリポイントがあるので大変だが、気軽にかけて良いので重宝している。 どんな自動化ツールも最終的にはシェルスクリプトで各部分が多少は発生すると思っている。 色々なデプロイ自動化もそのコマンド自体は実行する必要があったり、どこからかcredentialを持ってきたりとこまかい手間が発生する。 Makeは最後のそういう細かい作業をラップするのに最適なツールだと思う。

参考

stackoverflow.com

GNU Make 第3版

GNU Make 第3版

  • 作者:Robert Mecklenburg
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2005/12/01
  • メディア: 大型本