一江春水向东流

做一个有思想的人,期待与每一位热爱思考的人交流,您的关注是对我最大的支持。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  44 随笔 :: 139 文章 :: 81 评论 :: 0 Trackbacks

Makefile 学习笔记
    五一期间在学校呆着是在无聊,关于那些数据挖掘和算法的理论看的也实在是费劲,突然想练习实践一下,因为不会makefile编写的缘故,以前写程序时只能放到一个文件里,好了,现在开始了。
    又因为我毕业设计做的的是一个嵌入式网关,系统用的是uClinux,里面要用的一个WEB服务器,当然要支持CGI了,初步打算用boa,看看boa源码,不少啊,在看makefile还挺复杂,要用configure的,我在linux下.configure 然后後make了一下,错误一大串,还都是链接是出错了,象我这样的makefile菜鸟一时搞定,可能行不答了,又看了看user目录下的应用程序,还有一个httpd,这个我熟悉,以前看过,只有两个文件,好的,那这个练习了,里面现成的Makefile当然是不好使了。
写一个如下的makefile
#makefile
CC = gcc
EXEC = httpd
OBJS = httpd.o copy.o
HTTPD_DOCUMENT_ROOT = /home/httpd
CFLAGS += -DHTTPD_DOCUMENT_ROOT = \"$(HTTPD_DOCUMENT_ROOT)\"
all:$(EXEC)
$(EXEC):$(OBJS)
        $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
.c.o:
        $(CC) $(CFLAGS) -c $<

clean:
        -rm -f $(EXEC) *.elf *.gdb *.o
多少有参考原Makefile,make时会有错误,多make几次就成功了,运行./httpd
   这里的HTTP_DOCUMENT_ROOT这个参数不知怎么回事,我猜测是传到文件里的参数,但是我在你打印时就会有段错误,程序运行後,在浏览器里输入IP,在浏览器里列出了文件系统的目录,可以看是根目录,不对啊,按照上面传入的参数因该是/home/httpd才对的,看看httpd.c的源码
  signal(SIGCHLD, SIG_IGN);
  signal(SIGPIPE, SIG_IGN);
  signal(SIGALRM, sigalrm);

  chroot(HTTPD_DOCUMENT_ROOT);
  //chdir("/");
  //chdir(HTTPD_DOCUMENT_ROOT);
  chdir("/home/httpd");

  if (argc > 1 && !strcmp(argv[1], "-i")) {
原来这里将目录改变到根目录,怎么这么做呢,看来这代码真的很有问题,难怪我编译uClinux是老是出现很低级的错误。改成chdir(HTTPD_DOCUMENT_ROOT);在打开浏览器测试,服务器根目录在程序运行的目录,不是/home/httpd,打印就是段错误,多半是vdocument_root没有传进来,估计是makefile写的还有些问题。如是直接改成chdir("/home/httpd"),这下到了我存放网页的目录了。写了一个index.htm测试网页放到目录下,网页打开了。
今天makefile 实践就到此了,下回就把boa给编译了。

参考文章:MAKEFILE的编写(转载)

posted on 2007-05-03 10:47 allic 阅读(1476) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: