!!!make と Makefile {{category "UNIX Command",nolink}}make は、プログラムのコンパイル作業(ビルド)を自動化するツール。Makefile にコンパイルのルールやファイルの依存関係を記述し make を実行することで、ファイルの更新時刻の前後関係を参照し、必要最低限の動作だけで自動化された作業を完了することができる。 !!GNU Make (gmake) http://www.gnu.org/software/make/ Win32移植版は、GnuWin32 ( http://gnuwin32.sourceforge.net/ ) から入手できる。 !!BSD Parallel make (pmake) !!Microsoft Program Maintenance Utility (nmake) Visual C++ に付属する make コマンド。独自の記述項目が多く、gmake, pmake ほど互換性がない。 *http://msdn2.microsoft.com/ja-jp/library/dd9y37ha(VS.80).aspx (NMAKE リファレンス) なお、nmake の単体も http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe から入手できる。Nmake15.exe は自己解凍形式の圧縮ファイルで、実行すると NMAKE.EXE, NMAKE.ERR, README.TXT の3ファイルが展開される。NMAKE.EXE, NMAKE.ERR をパスが通った場所におく(かパスを通す)。ただし、これは、Visual C++ 2.X の NMAKE を 32bit OS で動くようにビルドされたもので古いものである。 !!Apache Ant http://ant.apache.org/ make のJava版ともいえるものであり、OSなど環境に依存しにくいビルドツール。 !!!make の実行 $ make と実行するとカレントの Makefile を読み込み、最初に書かれているターゲットの生成を開始する。 ターゲット(擬似ターゲットも含む)を指定して実行する場合は、ターゲット名を指定する。 $ make target make はデフォルトでカレントの [Mm]akefile という名前のファイルを読み込む。ファイルを指定する場合は、-f オプションでファイル名を指定する。 $ make -f Makefile.unix マクロ定義をコマンドラインで指定する場合は、次のようにする。この値は、Makefile で定義されている値よりも優先される。 $ make CC=gcc !!!マクロの定義 マクロは標準makeと同様に、"マクロ名=値"などのようにして定義する。既に定義済みのマクロも再定義可能である。また、make コマンド実行時にコマンドライン上で同じ名前のマクロが定義されていた場合には、そちらが有効となる。 HOGE = hoge1.c hoge2.c GNU makeでマクロに文字列を追加したい場合は、以下のように追加定義で記述する。 HOGE += hoge3.c hoge4.c また、自己参照で追加する場合は以下のように記述する。 HOGE := $(HOGE) hoge3.c hoge4.c nmakeでマクロに文字列を追加したい場合は、以下のように自己参照で記述する。 HOGE = $(HOGE) hoge3.c hoge4.c !!!マクロ内文字列の置換 パーセント記号を使うことで、マクロ内文字列を置換できる。 SRC = hoge1.c hoge2.c OBJ = $(SRC:%.c=%.o) とした場合、「OBJ = hoge1.o hoge2.o」と同じ結果になる !!!マクロの参照 マクロは $(HOGE) のように、マクロ名を $(〜) でかこむことで参照できる。