zoukankan      html  css  js  c++  java
  • Makefile

    1.Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。

     

    1. 显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。
    2. 隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。
    3. 变量的定义。在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。
    4. 文件指示。其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。有关这一部分的内容,我会在后续的部分中讲述。
    5.  注释。Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如:“#”。

    2.Makefile中的变量其实就是C/C++中的宏

      所以objects = *.o,并不是说[*.o]会展开,objects的值就是“*.o”,如果你要让通配符在变量中展开,也就是让objects的值是所有[.o]的文件名的集合,那么,你可以这样:

        objects := $(wildcard *.o)

    3. = := ?= += 区别

      = 是最基本的赋值
      := 是覆盖之前的值
      ?= 是如果没有被赋值过就赋予等号后面的值
      += 是添加等号后面的值

      (1、“=”

          make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:

                x = foo
                y = $(x) bar
                x = xyz

          在上例中,y的值将会是 xyz bar ,而不是 foo bar 。

          (2、“:=”

          “:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

                x := foo
                y := $(x) bar
                x := xyz

          在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。

  • 相关阅读:
    二叉树操作
    jQuery下拉列表插件 jQselectable
    DeDeCMS常用标签代码整理汇总
    用DEDECMS做手机网站
    DedeCMS模板文件结构
    用aspnet_compiler编译(发布)网站
    把网站提交到搜索引擎
    jGrowl 制作消息弹出框
    关于标签 XUACompatible
    jQuery下拉框插件 FlexBox
  • 原文地址:https://www.cnblogs.com/tswcypy/p/4597492.html
Copyright © 2011-2022 走看看