make

makeの:=と=を使い分けると便利

正直な話をすると今まで常に := だけを使っていて、= を使うことはあまりなかった。 使い分けると便利な状況が分かってきたのでここにメモしておく。 要約 ちょっとした実験用のタスクランナーとして使っていたMakefileの書き方が変わる1。 今まではこう書い…

Makefile上でprocess置換を使う方法

TL;DR makeはデフォルトでshが動く。bashなどにしないとprocess置換が使えない。 make中ではprocess置換が使えない? 何も考えずにprocess置換を使おうとするとエラーになってしまう。 $ make 02 python <(python -m prestring.python hello.py) /bin/sh: -c…

makefileにhelpを付けるワンライナー

makeファイルはデフォルトではhelpが存在しない。bashの補完の設定などを入れているとタブで利用可能なタスクの一覧が出る環境もあるが、その設定もしていない場合には利用可能なタスクの一覧も表示できない。 タスクに対するcommentの流派 似たようなことを…

Makefile上の個々の操作の実行時間をファイルに出力したかったところからの諸々

Makefile上の操作に対して、実行時間を計測したい。ただしコンソール上に出力するのではなくファイルに出力したい(というところから始まった)。 ファイルを分けたいので呼び出し側でリダイレクトでは無理 例えば以下の様なタスクがある。それぞれの操作の…

なぜちょっとした作業をやるときにMakefileを書いてしまうのか

はじめに なぜちょっとした作業をやる時にMakefileを書きたくなってしまうのかということについて頭を整理してみることにした。 ちょっとした作業? その前にちょっとした作業とは何かということについて触れることにする。ちょっとした作業というのはぱっと…

手触りの良いscript -- argparseとMakefileとiteratorの妙

手触りの良いscriptというものについて最近考えている。 ここでの手触りの良さとは何かというと粒度の自由さとアクセス性の良さに関するもの。別の言い方をするなら好きな形で扱え融通が効くようなもののこと。融通が効くというのはどういうことかと言えば、…

なぜmakeのeval,call,defineが欲しくなってしまうのか

なぜmakeのeval,call,defineが欲しくなってしまうのかについてぼーっと考えたりしてた(個人的な興味として、goのgithub.com/magefile/mageでmakeを置き換えられないかな−やっぱり無理かもみたいなものを考える上でmakeについてもう少しまじめに考える必要が…

makefileのforeachのハマりどころ

タスクランナーとしてのmakeのN回目。あんまり深追いしたくはないという気持ちもありつつ。 以前書いたようにmakefile中ではbashの関数などの定義ができない。そんなわけでdefineとcallを使う。これはこれで便利。ただforeachまで使おうとするとちょっとハマ…

Makefileと並行taskと生成されたtaskの実行の悩み

はじめに 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などの関数が使えないのでdefineとcallで代用する

makefile中でbashの関数などを使うことができない(プロセス置換も使えないのだけれどこれはまだ代用品が見つかっていない)。 これの代用品としてcallとdefineを使う。 bashの場合 例えば以下のようなecho3という関数経由でxを3回yを3回出力したいとする。 #!…

Makefileと再帰するときのオプションについて(-Cと-fの違い)

再帰する時に -C を使う場合と -f を使う場合がある。この時のcwdの扱いが異なる。 説明のために、以下のようなファイル構造でファイルが置かれているとする。 $ tree . . ├── Makefile └── sub └── Makefile トップレベルのMakefileの中身は以下のようなも…

makeの再帰と値の受け渡しについて

makefile中でサブディレクトリのmakefileや別のタスクを呼びたい時がある。このような場合には $(MAKE) を使う(くわしくはこのあたり)。起動している自身のコマンドで呼び出してくれるので便利(たとえばmakeがgmakeなどのコマンド名だった場合にgmakeが使わ…

makefileわりと便利だよという話

はじめに makeはmacにもlinuxにもデフォルトであって便利*1。 とは言え、色々とわかりづらいところがある。 便利なところだけ見繕って使うと便利。 個人的なmakefileの使い方は2種類 個人的には以下のような2つの目的でmakefileを使っている。 複数の目的の…

自然言語処理的な何かを始めようとした時に試行錯誤が辛かったのでそれなりに楽にできる環境を考えた

はじめに 久しぶりに幾つかのステップに分かれる変換が行われた結果を見ながら試行錯誤するというような作業をした。手軽に再実行などができる環境がないと辛くなってきたので、それなりに楽にできる環境を整えようとしてみた。 データの変換は幾つかのステ…