🍣でmakeの挙動を雑に説明
Sat Mar 3 11:19:49 JST 2018 (modified: Sat Mar 3 15:30:42 JST 2018)
views: 7497, keywords:頭の中だだ漏らし,どうでもよい,make この記事は最終更新日が6年以上前のものです。
昨日は、絵文字をmake
とMakefile
で使えることを発見したので色々遊んでいた。
こういう感じのMakefileが書ける. #書きたくない pic.twitter.com/tdjl9hQucZ
— Ryuichi Ueda (@ryuichiueda) 2018年3月2日
make
はCやC++のソースの処理に使うものというのが一般的な認識なのだが、シェルスクリプトのように使うこともできる。例えば、
sushi: 🐟
echo 寿司が作れる
🐟:
echo 魚を仕入れる
というmakeファイルをMakefile
という名前で作り、そのディレクトリでmake
と打つと
$ make sushi
echo 魚を仕入れる
魚を仕入れる
echo 寿司が作れる
寿司が作れる
というような出力が得られる。Makefile
の1行目のsushi: 🐟
は、
- 右下に記述された処理(ここでは1行だがタブでインデントして何行でも書ける)にsushiという名前がついていること
- sushiの実行には🐟が必要であること
を意味している。「🐟」という処理は🐟:
以下に書いてある。sushiには🐟が必要なので、make
は🐟以下の処理から先に始め、その次にsushiの処理を実行するので上のような出力が得られる。
ということで、Makefile
に「xの処理にはyが必要」というルールを記述すると、それにしたがって動くコマンド操作を記述することができる。これが、「xxx.oを作るにはxxx.cが必要」というようなルールを記述する時に便利なので、make
がビルドに使われる。
ちなみに、上記の例では「寿司を作るのにご飯がない」という致命的な間違いを犯している。正しくは、次のツイートのようにご飯を作るためのルール、そして魚がどのように育つかというルールを追加する必要がある。
こういうふうにMakefileを作ると・・・ pic.twitter.com/ghLLXznykH
— Ryuichi Ueda (@ryuichiueda) March 3, 2018
すると、make
は次のように、寿司が💩から作られることを、なんのためらいもなく理路整然と説明する。ここで-s
は処理の手順の出力を省き、結果だけを出力するためのオプションである。
🍣が💩からできていることがわかる。 pic.twitter.com/iXl95wiPKX
— Ryuichi Ueda (@ryuichiueda) March 3, 2018
なお、🍣から💩を作るプロセスをMakefile
に書いてしまうと、おそらくエラーが出てしまう。輪廻を表現できるような拡張が、今後、必要と考えられる。
繰り返しになるが、🍣は💩からできている。大自然に感謝の念しかない。
以上。