zoukankan      html  css  js  c++  java
  • linux基础之Makefile基础

    一、变量
    二、规则
    三、条件判断
    四、函数

    一、变量

    与Shell脚本非常类似,在Makefile中也会使用“弱类型”变量(相对于C语言这种强类型语言而言),
    在Makefile中变量就是一个名字(像是C语言中的宏),代表一个文本字符串(Makefile中变量的值)。
    在Makefile的目标、依赖、命令中引用一个变量的地方,变量会被它的值所取代(与C语言中宏引用的方式相同,因此其他版本的make也把变量称之为“宏”)。

    在Makefile中变量的特征有以下几点:

    • 1.变量和函数的展开(除规则的命令行以外),是在make读取Makefile文件时进行的,这里的变量包括了使用“=”定义和使用指示符“define”定义的变量。
    • 2.变量可以用来代表一个文件名列表、编译选项列表、程序运行的选项参数列表、搜索源文件的目录列表、编译输出的目录列表和所有我们能够想到的事物。
    • 3.变量名不能包括“:”、“#”、“=”、前置空白和尾空白的任何字符串。需要注意的是,尽管在GNUmake中没有对变量的命名有其它的限制,但定义一个包含除字母、数字和下划线以外的变量的做法也是不可取的,因为除字母、数字和下划线以外的其它字符可能会在以后的make版本中被赋予特殊含义,并且这样命名的变量对于一些Shell来说不能作为环境变量使用。
    • 4.变量名是大小写敏感的。变量“foo”、“Foo”和“FOO”指的是三个不同的变量。Makefile传统做法是变量名是全采用大写的方式。推荐的做法是在对于内部定义的一般变量(例如:目标文件列表objects)使用小写方式,而对于一些参数列表(例如:编译选项CFLAGS)采用大写方式,这并不是要求的。但需要强调一点:对于一个工程,所有Makefile中的变量命名应保持一种风格。
    • 5.另外有一些变量名只包含了一个或者很少的几个特殊的字符(符号),称它们为自动化变量。像“<”、“@”、“?”、“*”、“@D”、“%F”、“^D”等等,后面会详述之。
    • 6.变量的引用跟Shell脚本类似,使用美元符号和圆括号,比如有个变量叫A,那么对他的引用则是((A),有个自动化变量叫@,则对他的引用是)(@),有个系统变量是CC则对其引用的格式是((CC)。对于前面两个变量而言,他们都是单字符变量,因此对他们引用的括号可以省略,写成)A和$@。

    Makefile中有以下几种变量:

    • 1.自定义变量,例如:

    • 2.系统预定义变量,例如:CFLAGS、CC、MAKE、Shell等等,这些变量已经有了系统预定义好的值,当然我们可以根据需要重新给他们赋值,
      例如CC的默认值是gcc,当我们需要使用c编译器的时候可以直接使用他:

    二、规则

    • 1.隐式规则

    • 2.静态规则

    四、函数

  • 相关阅读:
    Flask: 用户认证
    Flask: Web表单
    Flask QuickBoot
    Flask: 构建API
    4 Gbase 8a 集群管理工具
    3 GBase 8a客户端
    2 GBase 8a 数据库版本升级
    1 GBase 8a MPP Cluster V95 安装和卸载
    0 GBase 8a MPP Cluster 数据库核心技术
    Chrome Network面板
  • 原文地址:https://www.cnblogs.com/risesource/p/11980203.html
Copyright © 2011-2022 走看看