ayu-mushi's website

Makefile っぽいことをシェルコマンドでする

Published
2018-4-8
Last Modified
2018-04-08
Source of This Page(GitHub)
https://github.com/ayu-mushi/ayu-mushi.github.io/blob/develop/src/article/instead-of-makefile.mdk

1. Makefile っぽいことをシェルコマンドでする

Makefileは便利ですが、ディレクトリ構造が複雑な場合(正規表現でも使わないと書けないときとか)など、自分でああいう動きをやりたいときがあります。

なんかMakeではソースより実行ファイルの方が新しいか確かめてる[要出典]って話を聞いたことがあるので、そのやりかたを使います。

シェルスクリプトでは、if [ $SOURCE -nt $BIN ] でソースより実行ファイルの方が新しいかで分岐できるので

CURRDIR=$(pwd)

function is_updated()
{
  SOURCE=# gonyogonyo ...
  BIN=#gonyogonyo ...
  if [ $SOURCE -nt $BIN ]
  then
    echo "ソースが更新された" >&2
    return 0
  else
    return 1
  fi
}

PRJECTS=$(./lsprj)
for prj in $PRJECTS;
do
  PRNAME=$(./prjtoname $prj)
  if $(is_updated $prj);
  then
    cd $PRNAME;
    echo $PRNAME"をビルド"
    stack build
    cd $CURRDIR
  else
    echo $PRNAME"の更新なし"
  fi
done

のようにしました。

プロジェクト毎にソースが更新されたか調べ、されていたならばビルド用の命令(ここではstack build)を走らせ、されていなければ「更新なし」と表示させています。