Makefile について
少し前の記事に、Windows の Makefile についてのコメントをいただきましたので、少し書いてみたいと思います。
Windows の開発環境である、Microsoft Visual Studio なんかですと、IDE(統合開発環境)がありますので、
Makefile を書くことは少ないと思います。
しかし、実は nmake や bscmake という make コマンドが付属していて、Unixライクなコンパイルをすることもできます。
nmake は、Unix の make に近いので、あまり迷うことはないと思いますが、一点だけ注意点があります。
Unix系は、/usr/bin などのパスが通ったディレクトリにコンパイラやアセンブラ、リンカが全て揃っているので次のように Makefile を書けます。
PROGRAM = pi_2
OBJS = pi_2.o
SRCS = $(OBJS:%.o=%.c)
CC = gcc
CFLAGS = -g -Wall
LDFLAGS =$(PROGRAM):$(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LDLIBS)
CC = gcc というところで、コンパイラを指定していますが、通常パスが通っているため /usr/bin/gcc が問題なく利用されます。
しかし、Windows の場合、コンパイラが C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\cl.exe こんなところにあったりするため、
通常はパスが通っていません。
そのため、パスを通すか、次の例のようにフルパスで指定しなければ動きません。
PROGRAM = pi_2.exe OBJS = pi_2.obj SRCS = $(OBJS:%.obj=%.c) CC = "C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\cl.exe" LD = "C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\link.exe" CFLAGS = -I"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\include" -I"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\atlmfc\include" -I"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include" LDFLAGS = /SUBSYSTEM:CONSOLE -LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\lib" -LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\atlmfc\lib" -LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Lib" .SUFFIXES : .c .c.obj : $(CC) $(CFLAGS) $(COPT) /c $<$(PROGRAM) : $(OBJS)
$(CC) $(OBJS) -link $(LDFLAGS)
それから、私の手元にある Visual Studio 2005 のnmakeなどは、mspdb80.dll というファイルがないと動かないため、これをカレントディレクトリにコピーしておくと良いでしょう。
C:\>copy "C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\mspdb80.dll" .
Windowsであれば、IDEを使った方が便利でしょうが、Makefileを使いたい場合は使えるということでした。