Makefileで「$」をescapeする


# TL;DR

Makefileで $をエスケープするには$$のようにする

# なんかMakefileでコマンドが正常に出力されなかった

ls -l | grep ^d | awk '{print $9}'
1

現在のパス中のディレクトリのみを一覧を出力する上記のコマンドをMakefileに記述したところ下記のように出力された。

output

drwxr-xr-x  3 user  staff    96  8 13 09:44 nvim
1

おもむろにデバッグしてみる

Makefile

.PHONY: test
test:
	ls -l | grep ^d | awk '{print $9}'
1
2
3

make test

output

ls -l | grep ^d | awk '{print }'
1

どうやらエスケープされていないよう

$$9のように$を重ねればよいそう

ls -l | grep ^d | awk '{print $$9}'
1

これでOK

# 関係ないけど

http://objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/gnu-make/rule.html

これMake入門に良さげ