美文网首页
005-书写规则

005-书写规则

作者: 山的那边是什么_ | 来源:发表于2018-10-22 09:51 被阅读5次

    规则包含两个部分,一个是依赖关系,一个是生成目标的方法。

    在 Makefile 中,规则的顺序是很重要的,因为,Makefile 中只应该有一个最终目标,其 它的目标都是被这个目标所连带出来的,所以一定要让 make 知道你的最终目标是什么。一 般来说,定义在 Makefile 中的目标可能会有很多,但是第一条规则中的目标将被确立为最 终的目标。如果第一条规则中的目标有很多个,那么,第一个目标会成为最终的目标。make 所完成的也就是这个目标。

    一、规则举例

    foo.o : foo.c defs.h # foo 模块 
              cc -c -g foo.c
    

    看到这个例子,各位应该不是很陌生了,前面也已说过,foo.o 是我们的目标,foo.c 和 defs.h 是目标所依赖的源文件,而只有一个命令“cc -c -g foo.c”(以 Tab 键开头)。 这个规则告诉我们两件事:
    1、文件的依赖关系,foo.o 依赖于 foo.c 和 defs.h 的文件,如果 foo.c 和 defs.h 的文件日期要比 foo.o 文件日期要新,或是 foo.o 不存在,那么依赖关系发生。
    2、如果生成(或更新)foo.o 文件。也就是那个 cc 命令,其说明了,如何生成 foo.o 这个文件。(当然 foo.c 文件 include 了 defs.h 文件)

    二、规则的语法


    targets 是文件名,以空格分开,可以使用通配符。一般来说,我们的目标基本上是一个文件,但也有可能是多个文件。

    command 是命令行,如果其不与“target:prerequisites”在一行,那么,必须以[Tab]键开头,如果和 prerequisites 在一行,那么可以用分号做为分隔。(见上)

    prerequisites 也就是目标所依赖的文件(或依赖目标)。如果其中的某个文件要比目标 文件要新,那么,目标就被认为是“过时的”,被认为是需要重生成的。这个在前面已经讲过 了。

    如果命令太长,你可以使用反斜框(‘\’)作为换行符。make 对一行上有多少个字符没有限 制。规则告诉 make 两件事,文件的依赖关系和如何成成目标文件。

    一般来说,make 会以 UNIX 的标准 Shell,也就是/bin/sh 来执行命令。

    相关文章

      网友评论

          本文标题:005-书写规则

          本文链接:https://www.haomeiwen.com/subject/eekvzftx.html