thttpd环境搭建
打算7、8月份把thttp的源码看一遍;反正也不多慢慢看
先把thttpd的可执行程序编译出来;方便调试。
(1)下源码
(2)修改makefile
# You shouldn't need to edit anything below here. #CC 制定编译器 #CCOPT 编译选项 # 优化: gcc默认提供了5级优 化选项的集合: # -O0:无优化(默认) # -O和-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化.在编译大型程序的时候会显著增加编译时内存的使用. # -O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化.编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能. # -Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项.并且执行专门减小目标文件大小的优化选项. # -O3: 打开所有-O2的优化选项并且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize优化选项. # #INCLS 编译选项 # -Idir 把dir 加入到搜索头文件的路径列表中。 # 例子: $ gcc test.c -I../inc -o test # INCLS = -I.表示当前目录下即为头文件目录 #CFLAGS 把所有编译选项合在一起 CC = gcc CCOPT = -O2 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 INCLS = -I. CFLAGS = $(CCOPT) $(DEFS) $(INCLS) LDFLAGS = LIBS = -lcrypt NETLIBS = INSTALL = /usr/bin/install -c #================================================================================== #=== .c.o: === #=== 这个规则表示所有的 .o文件都是依赖与相应的.c文件的。 === #===例如mytool.o依赖于mytool.c === #=== === #=== $@表示目标集;这里就是指所有.o文件 === #=== $<表示依赖目标集; === #=== === #=== gcc -c 表示生成.o的obj文件 === #=== === #=== 结果同上 === #================================================================================== #======================清除所有.o文件;并重新生成所有.o文件======================== .c.o: @rm -f $@ $(CC) $(CFLAGS) -c $*.c #=================================源文件=========================================== SRC = thttpd.c libhttpd.c fdwatch.c mmc.c timers.c match.c tdate_parse.c #================================================================================== #=== 变量的高级用法 === #=== foo:=a.o b.o c.o === #=== bar:=$(foo:.o=.c) === #=== 这个示例中,先顶一了一个$(foo)变量,二第二行的意思是吧$(foo)中所有.o === #===扩展符全部替换成“.c”,所以$(foo)的值就是a.c b.c c.c. === #=== === #=== foo:=a.o b.o c.o === #=== bar:=$(foo:%.o=%.c) === #=== 结果同上 === #================================================================================== #==============================中间代码文件======================================== OBJ = $(SRC:.c=.o) ALL = thttpd GENHDR = mime_encodings.h mime_types.h #==============================要清除的文件======================================== CLEANFILES = $(ALL) $(OBJ) $(GENSRC) $(GENHDR) this: $(ALL) #==============================生成可执行文件======================================== thttpd: $(OBJ) @rm -f $@ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $(NETLIBS) mime_encodings.h: mime_encodings.txt rm -f mime_encodings.h sed < mime_encodings.txt > mime_encodings.h \ -e 's/#.*//' -e 's/[ ]*$$//' -e '/^$$/d' \ -e 's/[ ][ ]*/", 0, "/' -e 's/^/{ "/' -e 's/$$/", 0 },/' mime_types.h: mime_types.txt rm -f mime_types.h sed < mime_types.txt > mime_types.h \ -e 's/#.*//' -e 's/[ ]*$$//' -e '/^$$/d' \ -e 's/[ ][ ]*/", 0, "/' -e 's/^/{ "/' -e 's/$$/", 0 },/' #================================================================================== # mime_types.txt文件内容如下 # # A list of file extensions followed by the corresponding MIME type. # Extensions not found in the table are returned as text/plain. # #a application/octet-stream #aab application/x-authorware-bin #aam application/x-authorware-map #aas application/x-authorware-seg #ai application/postscript # # #=== -e 's/#.*//' 把所有#号开头的行替换成空行 === #=== -e 's/[ ]*$$//' #=== bar:=$(foo:.o=.c) === #=== 这个示例中,先顶一了一个$(foo)变量,二第二行的意思是吧$(foo)中所有.o === #===扩展符全部替换成“.c”,所以$(foo)的值就是a.c b.c c.c. === #=== === #=== foo:=a.o b.o c.o === #=== bar:=$(foo:%.o=%.c) === #=== 结果同上 === #================================================================================== thttpd.o: config.h version.h libhttpd.h fdwatch.h mmc.h timers.h match.h libhttpd.o: config.h version.h libhttpd.h mime_encodings.h mime_types.h \ mmc.h timers.h match.h tdate_parse.h fdwatch.o: fdwatch.h mmc.o: mmc.h libhttpd.h timers.o: timers.h match.o: match.h tdate_parse.o: tdate_parse.h .PHONY:clean clean: rm -f $(CLEANFILES)
这就可以编译成thttpd了;不报错
但是感觉makefile看的还是有点晕;而且感觉这个makefile写的不怎么好;里面有些东西看的不是完全懂;
不过不管;先就将就用;等花时间研究下makefile;再重写下。

浙公网安备 33010602011771号