1 # Top level hierarchy.
2 prefix = /usr/local
3 exec_prefix = ${prefix}
4 # Pathname of directory to install the binary.
5 BINDIR = ${exec_prefix}/sbin
6 # Pathname of directory to install the man page.
7 MANDIR = ${prefix}/man
8 # Pathname of directory to install the CGI programs.
9 WEBDIR = $(prefix)/www
10
11 # CONFIGURE: The group that the web directory belongs to. This is so that
12 # the makeweb program can be installed set-group-id to that group, and make
13 # subdirectories. If you're not going to use makeweb, ignore this.
14 WEBGROUP = www
15
16 # CONFIGURE: Directory for CGI executables.
17 CGIBINDIR = $(WEBDIR)/cgi-bin
18
19 # You shouldn't need to edit anything below here.
20 #CC 制定编译器
21 #CCOPT 编译选项
22 # 优化: gcc默认提供了5级优 化选项的集合:
23 # -O0:无优化(默认)
24 # -O和-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化.在编译大型程序的时候会显著增加编译时内存的使用.
25 # -O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化.编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能.
26 # -Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项.并且执行专门减小目标文件大小的优化选项.
27 # -O3: 打开所有-O2的优化选项并且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize优化选项.
28 #
29 #INCLS 编译选项
30 # -Idir 把dir 加入到搜索头文件的路径列表中。
31 # 例子: $ gcc test.c -I../inc -o test
32 # INCLS = -I.表示当前目录下即为头文件目录
33 #CFLAGS 把所有编译选项合在一起
34
35 CC = gcc
36 CCOPT = -O2
37 DEFS = -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_DAEMON=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_SIGSET=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_TM_GMTOFF=1 -DHAVE_INT64T=1 -DHAVE_SOCKLENT=1
38 INCLS = -I.
39 CFLAGS = $(CCOPT) $(DEFS) $(INCLS)
40 LDFLAGS =
41 LIBS = -lcrypt
42 NETLIBS =
43 INSTALL = /usr/bin/install -c
44
45
46 #==================================================================================
47 #=== .c.o: ===
48 #=== 这个规则表示所有的 .o文件都是依赖与相应的.c文件的。 ===
49 #===例如mytool.o依赖于mytool.c ===
50 #=== ===
51 #=== $@表示目标集;这里就是指所有.o文件 ===
52 #=== $<表示依赖目标集; ===
53 #=== ===
54 #=== gcc -c 表示生成.o的obj文件 ===
55 #=== ===
56 #=== 结果同上 ===
57 #==================================================================================
58 #======================清除所有.o文件;并重新生成所有.o文件========================
59 .c.o:
60 @rm -f $@
61 $(CC) $(CFLAGS) -c $*.c
62 #=================================源文件===========================================
63 SRC = thttpd.c libhttpd.c fdwatch.c mmc.c timers.c match.c tdate_parse.c
64
65 #==================================================================================
66 #=== 变量的高级用法 ===
67 #=== foo:=a.o b.o c.o ===
68 #=== bar:=$(foo:.o=.c) ===
69 #=== 这个示例中,先顶一了一个$(foo)变量,二第二行的意思是吧$(foo)中所有.o ===
70 #===扩展符全部替换成“.c”,所以$(foo)的值就是a.c b.c c.c. ===
71 #=== ===
72 #=== foo:=a.o b.o c.o ===
73 #=== bar:=$(foo:%.o=%.c) ===
74 #=== 结果同上 ===
75 #==================================================================================
76 #==============================中间代码文件========================================
77 OBJ = $(SRC:.c=.o)
78
79 ALL = thttpd
80
81 GENHDR = mime_encodings.h mime_types.h
82 #==============================要清除的文件========================================
83 CLEANFILES = $(ALL) $(OBJ) $(GENSRC) $(GENHDR)
84
85 SUBDIRS = cgi-src extras
86
87 all: this subdirs
88 this: $(ALL)
89 #==============================生成可执行文件========================================
90 thttpd: $(OBJ)
91 @rm -f $@
92 $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $(NETLIBS)
93
94 mime_encodings.h: mime_encodings.txt
95 rm -f mime_encodings.h
96 sed < mime_encodings.txt > mime_encodings.h \
97 -e 's/#.*//' -e 's/[ ]*$$//' -e '/^$$/d' \
98 -e 's/[ ][ ]*/", 0, "/' -e 's/^/{ "/' -e 's/$$/", 0 },/'
99
100 mime_types.h: mime_types.txt
101 rm -f mime_types.h
102 sed < mime_types.txt > mime_types.h \
103 -e 's/#.*//' -e 's/[ ]*$$//' -e '/^$$/d' \
104 -e 's/[ ][ ]*/", 0, "/' -e 's/^/{ "/' -e 's/$$/", 0 },/'
105 #==================================================================================
106 # mime_types.txt文件内容如下
107 #
108 # A list of file extensions followed by the corresponding MIME type.
109 # Extensions not found in the table are returned as text/plain.
110 #
111 #a application/octet-stream
112 #aab application/x-authorware-bin
113 #aam application/x-authorware-map
114 #aas application/x-authorware-seg
115 #ai application/postscript
116 #
117 #
118 #=== -e 's/#.*//' 把所有#号开头的行替换成空行 ===
119 #=== -e 's/[ ]*$$//'
120 #=== bar:=$(foo:.o=.c) ===
121 #=== 这个示例中,先顶一了一个$(foo)变量,二第二行的意思是吧$(foo)中所有.o ===
122 #===扩展符全部替换成“.c”,所以$(foo)的值就是a.c b.c c.c. ===
123 #=== ===
124 #=== foo:=a.o b.o c.o ===
125 #=== bar:=$(foo:%.o=%.c) ===
126 #=== 结果同上 ===
127 #==================================================================================
128
129 subdirs:
130 for i in $(SUBDIRS) ; do ( \
131 cd $$i ; \
132 pwd ; \
133 $(MAKE) $(MFLAGS) \
134 WEBDIR=$(WEBDIR) \
135 CGIBINDIR=$(CGIBINDIR) \
136 MANDIR=$(MANDIR) \
137 WEBGROUP=$(WEBGROUP) \
138 ) ; done
139
140
141 install: installthis install-man installsubdirs
142
143 installthis:
144 -mkdir -p $(DESTDIR)$(BINDIR)
145 $(INSTALL) -m 555 -o bin -g bin thttpd $(DESTDIR)$(BINDIR)
146
147 install-man:
148 -mkdir -p $(DESTDIR)$(MANDIR)/man8
149 $(INSTALL) -m 444 -o bin -g bin thttpd.8 $(DESTDIR)$(MANDIR)/man8
150
151 installsubdirs:
152 for i in $(SUBDIRS) ; do ( \
153 cd $$i ; \
154 pwd ; \
155 $(MAKE) $(MFLAGS) \
156 WEBDIR=$(WEBDIR) \
157 CGIBINDIR=$(CGIBINDIR) \
158 MANDIR=$(MANDIR) \
159 WEBGROUP=$(WEBGROUP) \
160 install \
161 ) ; done
162
163
164 clean: cleansubdirs
165 rm -f $(CLEANFILES)
166
167 distclean: distcleansubdirs
168 rm -f $(CLEANFILES) Makefile config.cache config.log config.status tags
169
170 cleansubdirs:
171 for i in $(SUBDIRS) ; do ( \
172 cd $$i ; \
173 pwd ; \
174 $(MAKE) $(MFLAGS) clean \
175 ) ; done
176
177 distcleansubdirs:
178 for i in $(SUBDIRS) ; do ( \
179 cd $$i ; \
180 pwd ; \
181 $(MAKE) $(MFLAGS) distclean \
182 ) ; done
183
184 tags:
185 ctags -wtd *.c *.h
186
187 tar:
188 @name=`sed -n -e '/SERVER_SOFTWARE/!d' -e 's,.*thttpd/,thttpd-,' -e 's, .*,,p' version.h` ; \
189 rm -rf $$name ; \
190 mkdir $$name ; \
191 tar cf - `cat FILES` | ( cd $$name ; tar xfBp - ) ; \
192 chmod 644 $$name/Makefile.in $$name/config.h $$name/mime_encodings.txt $$name/mime_types.txt ; \
193 chmod 755 $$name/cgi-bin $$name/cgi-src $$name/contrib $$name/contrib/redhat-rpm $$name/extras $$name/scripts ; \
194 tar cf $$name.tar $$name ; \
195 rm -rf $$name ; \
196 gzip $$name.tar
197
198 thttpd.o: config.h version.h libhttpd.h fdwatch.h mmc.h timers.h match.h
199 libhttpd.o: config.h version.h libhttpd.h mime_encodings.h mime_types.h \
200 mmc.h timers.h match.h tdate_parse.h
201 fdwatch.o: fdwatch.h
202 mmc.o: mmc.h libhttpd.h
203 timers.o: timers.h
204 match.o: match.h
205 tdate_parse.o: tdate_parse.h