ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

#

演示目标体,依赖体和命令的简单makefile文件
howdy: howdy.o helper.o helper.h
    gcc howdy.o helper.o -o howdy
helper.o: helper.c helper.h
    gcc -c helper.c
howdy.o: howdy.c
    gcc -c howdy.c
hello: hello.c
    gcc hello.c -o hello
all: howdy hello
clean:
    rm howdy hello *.o

这个makefile文件包含6条规则.第一个目标体howdy称为默认(default)目标体--这是make要创建的文件.howdy有3个依赖体,分别为howdy.o,helper.o和helper.h;要编译生成howdy,必须要有这3个文件.
第二行调用编译器的命令供make执行来创建howdy.把头文件helper.h作为一个依赖体列入是为了避免编译器调用未声明的函数产生出错信息.
接下来的两条规则告诉make怎样生成单个目标文件,helper.o和howdy.o.这些规则使用了gcc的-c选项,只创建目标文件但跳过链接.如果只想生成两个目标文件而不生成howdy本身,可以使用下面两条命令:
  $make helper.o
  $make howdy.o
更简洁一点,只需使用
  $make helper.o howdy.o
posted @ 2005-08-04 21:52 ivaneeo 阅读(237) | 评论 (0)编辑 收藏

makefile是一个文本形式的数据库文件,其中包含一些规则告诉make编译哪些文件,怎样编译以及在什么条件下去编译.每条规则包含以下内容:
.一个"目标体"(target),即make最终需要创建的东西.
.包含一个或多个"依赖体"(dependency)的列表,依赖体通常是编译目标体需要的其他文件.
.为了从指定的依赖体创建出目标体所需执行的"命令"(command)的列表.

虽然目标体通常是程序,但它们可以是诸如文本文件,手册页面等任何东西.目标体甚至能测试和设置环境变量.类似地,也可以定义依赖体以确保编译开始前存在 某个特殊的环境变量.最后,makefile中的命令可以是编译器的命令或shell命令,它们能设置环境变量,删除文件,或者任何命令行所能完成的功 能,如从FTP站点下载文件等.GNU make被调用后会顺序查找名为GNUmakefile,makefile或Makefile的文件.出于某种原因,可能只是习惯和长期形成的约定吧,大 多数Linux程序员使用最后一种形式Makefile.

Makefile规则有下列通用形式:
  target : dependency [dependency [...]]
      command
      command
      [...]
posted @ 2005-08-04 21:51 ivaneeo 阅读(239) | 评论 (0)编辑 收藏

假设有下面这样的一个makefile:
  OBJS = editor.o screen.o keyboard.o
  edit : $(OBJS)
      cc -o editor $(OBJS)
  .PHONY : clean
  clean :
      rm editor $(OBJS)
此时,make就使用所谓的隐式规则,实际上,对每一个名为somefile.o的目标(object)文件,make首先找到与之相应的源代码somefile.c,并且用gcc -c somefile.c -o somefile.o 编译生产这个目标文件.
  实际的机制比这个所描述的要全面.目标文件(.o)可以从c,Pascal和Fortran等源代码中生产,所以make也应去查找符合实际情况的相关文件.
posted @ 2005-08-04 21:51 ivaneeo 阅读(272) | 评论 (0)编辑 收藏

通过定义用户自己的隐式规则,模式规则提供了开展make的隐式规则的一种方法.模式规则类似于普通规则,但是它们的目标必定含有符号"%".这个符号可以与任何非空字符串匹配:为与目标中的"%"匹配,这个规则的相关文件部分也必须使用"%".例如,下面的规则:
  %.o : %.c
  告诉make所有形为somename.o的目标(object)文件都应从源文件somename.c编译而来.
  与隐式规则一样,make预定义了一些模式规则:
  %.o : %.c
      $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
posted @ 2005-08-04 21:50 ivaneeo 阅读(199) | 评论 (0)编辑 收藏

                        常用的make命令行选项
选项               说明
-f file            指定makefile的文件名
-n                 打印将需要执行的命令,但实际上并不执行这些命令
-Idirname          指定被包含的makefile所在的目录
-s                 在执行时不打印命令名
-w                 如果make在执行时改变目录,打印当前目录名
-Wfile             如果文件已修改,则使用-n来显示make将要执行的命令
-r                 禁止使用所有make的内置规则
-d                 打印调试信息
-i                 忽略makefile规则中的命令执行后返回的非零错误码,此时,即使某个命令返回非零的退出状态值,make仍将继续执行.
-k                 如果某个目标编译失败,继续编译其他目标.通常,make在一个目标编译失败后终止
-jN                每次运行N个命令,这里N是非零整数



posted @ 2005-08-04 21:49 ivaneeo 阅读(282) | 评论 (0)编辑 收藏

如果在使用make时遇到问题,-d选项能够使make在执行命令时打印打量的额外调试信息.其中包括如下信息:
.在重新编译时make需要检查的文件
.被比较的文件以及比较的结果
.需要被重新生产的文件
.make想要使用的隐式规则
.make实际使用的隐式规则以及所执行的命令
posted @ 2005-08-04 21:49 ivaneeo 阅读(372) | 评论 (0)编辑 收藏

.No rule to make target 'target'.Stop makefile中没有包含创建指定的target所需要的规则,而且也没有合适的默认规则可用.
.'target' is up to date 指定 target 的相关文件没有变化.
.Target 'target' not remade because of errors 在编译target时出错,这一消息仅在使用make的-k选项时才会出现.
.command: Command not found make 找不到命令.通常是因为命令被拼写错误或者不在路径$PATH下.
.Illegal option - option 在调用make时包含了不能被make识别的选项.
posted @ 2005-08-04 21:48 ivaneeo 阅读(862) | 评论 (1)编辑 收藏

出了clean的目标,外编写makefile时还有一些常用的目标.
名为install的目标把最终的二进制,所支持的库文件或shell脚本,以及相关的文档移动到文件系统中与之相应的最终位置,并适当设置文件的权限和属主.
  uninstall目标则删除由install目标所安装的那些文件.
dist目标可以用来生产准备发布的软件包.最低限度,dist目标将删除编译工作目标中旧的二进制文件和目标文件并创建一个归档文件(如普通的压缩包),以便上载到万维网页或FTP站点.
posted @ 2005-08-04 21:47 ivaneeo 阅读(217) | 评论 (0)编辑 收藏

 http://www.cs.indiana.edu/classes/a348-dger/fall2002/notes/ 
值得推荐。
posted @ 2005-08-04 21:46 ivaneeo 阅读(161) | 评论 (0)编辑 收藏

indent能够按照许多预先定义好的或者自定义的标准调整源代码以及代码缩进的格式以达到所需的风格.tags程序(它在emacs上的对应程序, etags)生成的文件能够增强编辑器浏览和分析源代码的能力.lclint程序是在编译源代码之前做个快速语法检查.它能检查代码,找出大量问题,包括 未声明的变量和函数,可能的内存破坏(memory corruption),当然它能检查的问题不仅仅就这几种.
网上这类工具中最好的资源是"动态存储分配和内存管理信息库"(Dynamic Store Allocation and Memory Management Information Repository),它的Web地址为 http://www.cs.colorado.edu/~zorn/DSA.html/.
posted @ 2005-08-04 21:46 ivaneeo 阅读(148) | 评论 (0)编辑 收藏

仅列出标题
共67页: First 上一页 57 58 59 60 61 62 63 64 65 下一页 Last