Makefile の書き方
SHELL 変数 (本当は変数じゃなくてマクロだけど) を自分で設定するのはむしろ宜しくないと思う。
POSIX.1-2001 準拠の make は予め SHELL 変数に適切な値を設定しておいてくれるので、SHELL 変数を自分で設定する必要はない。GNU make もちゃんとそうなっている。むしろ POSIX 準拠シェルが /bin/sh にあるという仮定は根拠がない (少なくとも POSIX はシェルを /bin/sh にインストールしろとは言っていない。) ので、自分で無闇に SHELL 変数を変えると却ってうまく動かない虞もある。SHELL 変数は Makefile の中のコマンドを tcsh で書くような頭のおかしい人だけがいじればよい。
なお、普段は zsh や tcsh を使っているので SHELL 環境変数が /bin/zsh や /bin/tcsh になっているという人も心配ない。make は、起動時に与えられた SHELL 環境変数を無視して、常に POSIX 準拠シェルのありかを SHELL 変数に設定するはずだから。
ところで、Makefile の書き方を説明する文章なんてググればたくさん出てくるけれども、デフォルトのルールを使うことを最初に教えている文章はなさそうだ少ない。俺は物事の入門は何事でも簡単なものから始めるのが良いと考えているので、まずはデフォルトのルールを使って一つのプログラムをコンパイルすることを教えることから始めたらどうかと思う。特に GNU Make は例えば sample.c を cc でコンパイルして sample という実行可能ファイルを作るというのは、
sample:
というたった一行の Makefile で実現できる。sample1.c, sample2.c, sample3.c の三つをそれぞれコンパイルして sample1.o, sample2.o, sample3.o を作り、それらをリンクして sample を作る、というのも、GNU Make なら
sample: sample1.o sample2.o sample3.o
という一行で済む。いきなり長ったらしいルールの書き方を教えるのではなくて、こういう簡単な Makefile の書き方から教えた方が初心者も取っ付きやすいと思う。
少なくとも、C のプログラムを普通にビルドするだけならデフォルトのルール (と CFLAGS 等の変数) だけで事足りるので、ルールを自分で書く必要はないはず。ルールの書き方を覚えるのは C 以外の言語に make を使おうとしてからでも遅くない。
| 固定リンク

コメント