Windows下的Makefile

有时想写几个小程序作为测试用,又不想开虚拟机,也不想开VS。只想简单用个编辑器写完,在命令行里编译运行看结果。于是就自己整理了一个在Windows下可用的Makefile。 我似乎对Makefile情有独钟,接触Linux后,搞了驱动的Makefile模板,应用程序的Makefile模板(而且还搞了好几套不同应用场合的模板),现在又搞Windows平台的模板。可见本人的确是无事找事做之人。

闲话少提,下面给出我整理后的Makefile模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# This is a simple Makefile under Windows using cl.exe and link.exe

# By Late Lee Copyleft 2011 2012

# note

# 1. you should make sure cl.exe and link.exe in your $PATH

# usage

# dos:nmake -f Makefile_win32 (using -f to specify the Makefile)
# dos:nmake (if your Makefile is just "Makefile")

# !!!=== your executable file
TARGET = a.exe
CC = cl.exe
LINK = link.exe
RM = del

# /MDd

# /I*your-inc-dir*
CFLAGS = /nologo /D "WIN32" /Od /c /Tp
CPPFLAGS = /nologo /D "WIN32" /Od /c
LDFLAGS = /nologo

# /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib

# /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib

# LDFLAGS = /NODEFAULTLIB:library

# !!!===your c source file
SRCS_C =

# !!!===your c++ source file
SRCS_CXX = main.cpp
OBJS_C = $(SRCS_C:.c=.obj)
OBJS_CXX = $(SRCS_CXX:.cpp=.obj)
!MESSAGE begin....
all: clean $(TARGET)

# @$(RM) *.obj
@echo "Done."
$(TARGET): $(OBJS_C) $(OBJS_CXX)

# $(CC) $(CFLAGS) $(OBJS) -o $@
$(LINK) $** $(LDFLAGS) /OUT:$@

# compile .c as .cpp
.c.obj::
$(CC) $(CFLAGS) $<
.cpp.obj::
$(CC) $(CPPFLAGS) $<

#$(OBJS): $(SRCS)

# $(CC) -c $**

clean:
@echo "Cleaning..."
$(RM) $(TARGET) *.obj
@echo "Done."
.PHONY: clean all the world

这个Makefile比较简单,所以只适用于简单的场合。
上述内容参考了一些网络资料,因为比较常用,所以不列出来。