オルタナティブ・ブログ > mtaneda ブログ >

中小企業の開発者は会社で何をしているのか

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を使いたい場合は使えるということでした。

Comment(0)