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

    1.规则

    规则定义格式如下

    目标 : 条件1 条件2 ...
        命令1
        命令2
        ...

    隐含规则和模式规则(略)

    2.变量

    Makefile变量像C的宏定义一样,代表一串字符,在取值的地方展开。

    1)两种定义方式

    用'='定义的变量会延迟展开,即在真正需要取值的时候才会展开;用':='定义的变量则是在变量定义时立即展开。

    2)'?='运算符

    '?='是赋值运算符,例如foo ?= $(bar)的意思是:如果foo没有定义过,那么?=相当于=,定义foo的值是$(bar),但不立即展开;如果先前已经定义了foo,则什么也不做,不会给foo重新赋值。

    3)'+='运算符

    '+='运算符可以给变量追加值,比如:

    objects = main.o
    objects += $(foo)
    foo = foo.o bar.o

    objects是用=定义的,+=仍然保持=的特性,objects的值是main.o $(foo)(注意$(foo)前面自动添加一个空格), 但不立即展开,等到后面需要展开$(objects)时会展开成main.o foo.o bar.o。

    再比如:

    objects := main.o
    objects += $(foo)
    foo = foo.o bar.o

    objects是用:=定义的,+=保持:=的特性,objects的值是main.o $(foo),立即展开得到main.o (这时foo还没定义),注意main.o后面的空格仍保留。

    如果变量还没有定义过就直接用+=赋值,那么+=相当于=。

    4)特殊变量:
    $@:取值为规则中的目标
    $<:取值为规则中的第一个条件
    $?:取值为规则中所有比目标新的条件,组成一个列表,以空格分割
    $^:取值为规则中所有条件,组成一个列表,以空格分割

    3.命令

    1)如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果。

    2)通常make执行的命令如果出错(该命令的退出状态非0)就立刻终止,不再执行后续命令,但如果命令前面加了-号,即使这条命令出错,make也会继续执行后续命令。通常rm命令和mkdir命令前面要加-号,因为rm要删除的文件可能不存在,mkdir要创建的目录可能已存在,这两个命令都有可能出错,但这种错误是应该忽略的。

  • 相关阅读:
    直接使用http post的方式上传文件到SharePoint
    Asp.net mvc + .net ef database first 或 model first 时如何添加验证特性
    论文摘要
    4.6 考试的设计和实现(制定考场规则)
    参考文献
    vb 6.0数据库操作代码例子
    4.9 用户界面的设计和实现(DIV+CSS,可编辑的TreeView用户控件)
    4.2用户登陆和安全验证(利用HttpModule集中处理身份检查)
    4.7 学生在线考试表示层的设计和实现(异步保存答案,考试计时和自动交卷)
    第2章 需求分析
  • 原文地址:https://www.cnblogs.com/codingthings/p/4718400.html
Copyright © 2011-2022 走看看