make
正直な話をすると今まで常に := だけを使っていて、= を使うことはあまりなかった。 使い分けると便利な状況が分かってきたのでここにメモしておく。 要約 ちょっとした実験用のタスクランナーとして使っていたMakefileの書き方が変わる1。 今まではこう書い…
TL;DR makeはデフォルトでshが動く。bashなどにしないとprocess置換が使えない。 make中ではprocess置換が使えない? 何も考えずにprocess置換を使おうとするとエラーになってしまう。 $ make 02 python <(python -m prestring.python hello.py) /bin/sh: -c…
makeファイルはデフォルトではhelpが存在しない。bashの補完の設定などを入れているとタブで利用可能なタスクの一覧が出る環境もあるが、その設定もしていない場合には利用可能なタスクの一覧も表示できない。 タスクに対するcommentの流派 似たようなことを…
Makefile上の操作に対して、実行時間を計測したい。ただしコンソール上に出力するのではなくファイルに出力したい(というところから始まった)。 ファイルを分けたいので呼び出し側でリダイレクトでは無理 例えば以下の様なタスクがある。それぞれの操作の…
はじめに なぜちょっとした作業をやる時にMakefileを書きたくなってしまうのかということについて頭を整理してみることにした。 ちょっとした作業? その前にちょっとした作業とは何かということについて触れることにする。ちょっとした作業というのはぱっと…
手触りの良いscriptというものについて最近考えている。 ここでの手触りの良さとは何かというと粒度の自由さとアクセス性の良さに関するもの。別の言い方をするなら好きな形で扱え融通が効くようなもののこと。融通が効くというのはどういうことかと言えば、…
なぜmakeのeval,call,defineが欲しくなってしまうのかについてぼーっと考えたりしてた(個人的な興味として、goのgithub.com/magefile/mageでmakeを置き換えられないかな−やっぱり無理かもみたいなものを考える上でmakeについてもう少しまじめに考える必要が…
タスクランナーとしてのmakeのN回目。あんまり深追いしたくはないという気持ちもありつつ。 以前書いたようにmakefile中ではbashの関数などの定義ができない。そんなわけでdefineとcallを使う。これはこれで便利。ただforeachまで使おうとするとちょっとハマ…
はじめに make に -j オプションを渡してあげると、良い感じにmakeが並行実行してくれる。 Makefile default: do01 do02 do03 do01: @echo start 01 sleep 1 @echo end 01 do02: @echo start 02 sleep 1 @echo end 02 do03: @echo start 03 sleep 1 @echo en…
makefile中でbashの関数などを使うことができない(プロセス置換も使えないのだけれどこれはまだ代用品が見つかっていない)。 これの代用品としてcallとdefineを使う。 bashの場合 例えば以下のようなecho3という関数経由でxを3回yを3回出力したいとする。 #!…
再帰する時に -C を使う場合と -f を使う場合がある。この時のcwdの扱いが異なる。 説明のために、以下のようなファイル構造でファイルが置かれているとする。 $ tree . . ├── Makefile └── sub └── Makefile トップレベルのMakefileの中身は以下のようなも…
makefile中でサブディレクトリのmakefileや別のタスクを呼びたい時がある。このような場合には $(MAKE) を使う(くわしくはこのあたり)。起動している自身のコマンドで呼び出してくれるので便利(たとえばmakeがgmakeなどのコマンド名だった場合にgmakeが使わ…
はじめに makeはmacにもlinuxにもデフォルトであって便利*1。 とは言え、色々とわかりづらいところがある。 便利なところだけ見繕って使うと便利。 個人的なmakefileの使い方は2種類 個人的には以下のような2つの目的でmakefileを使っている。 複数の目的の…
はじめに 久しぶりに幾つかのステップに分かれる変換が行われた結果を見ながら試行錯誤するというような作業をした。手軽に再実行などができる環境がないと辛くなってきたので、それなりに楽にできる環境を整えようとしてみた。 データの変換は幾つかのステ…