• Gun make可识别指示符


    1,可识别指示符

     

    2,多行定义--define VARIABLE endef

    define two-lines 
    echo foo 
    echo $(bar) 
    endef 

    相当于: two-lines = echo foo; echo $(bar)  

    3,条件判断 --ifdef --ifeq

    ifdef VARIABLE     -----定义
    ifndef VARIABLE   -----未定义
    ifeq (A,B)             -----相等
    ifeq "A" "B"          -----相等
    ifeq 'A' 'B'            -----相等
    ifneq (A,B)          -----不相等
    ifneq "A" "B"       -----不相等
    ifneq 'A' 'B'         -----不相等
    else 
    endif

    4,包含文件--include sinclude

    include FILE 
    -include FILE 
    sinclude FILE

    5,overide指示符--=,:=,?=,+=

    override VARIABLE = VALUE 
    override VARIABLE := VALUE 
    override VARIABLE += VALUE 
    override VARIABLE ?= VALUE 
    override define VARIABLE 
    ende

    1)overide主要作用是,覆盖make命令传递的参数

     

     2)=,:=,?=,+=

    2.1) =---递归展开式变量的赋值

    example1:

    foo = $(bar) 
    bar = $(ugh) 
    ugh = Huh? 
    all:;echo $(foo)

    执行“make”将会打印出“Huh?”。整个变量的替换过程时这样的:首先“$(foo)”被 替换为“$(bar)”,接下来“$(bar)”被替换为“$(ugh)”,最后“$(ugh)”被替换为“Hug?”。 整个替换的过程是在执行“echo $(foo)”时完成的。

    其优点是: 这种类型变量在定义时,可以引用其它的之前没有定义的变量(可能在后续部分定义, 或者是通过 make 的命令行选项传递的变量)。

    example2:

    CFLAGS = $(include_dirs) -O 
    include_dirs = -Ifoo -Ibar

    “CFLAGS”会在命令中被展开为“-Ifoo -Ibar -O”。而在“CFLAGS”的定义中使用 了其后才定义的变量“include_dirs”。

    example3:

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

    y的值将会是 xyz bar ,而不是 foo bar 

    2.2) :=---直接展开式变量的赋值

    变量被定义后就是一个实际需要的文本串,其中不再包含任何变量的引用

    example1:

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

    等价于:

    y := foo bar 
    x := later

    y的值将会是 foo bar ,而不是 later bar 了

    2.3) ?=---条件赋值操作符

    只有此变量在之前没有赋值的情况下才会对这个变量进行赋值

    FOO ?= bar

    其等价于:

    ifeq ($(origin FOO), undefined) 
    FOO = bar 
    endif

    含义是:如果变量“FOO”在之前没有定义,就给它赋值“bar”。否则不改变它的值。

    关于origin函数参见后续文章或者makefile之origin函数 - suonikeyinsu - 博客园 (cnblogs.com),主要用来查看是否定义,从哪里来的

    2.4)+=----追加,这里就不详细描述了

    6,export /unexport VARIABLE

    需要将一个在上层定义的变量传递给子 make,应该在上层 Makefile 中使用指示符
    “export”对此变量进行声明。格式如下:
    export VARIABLE ... 
    当不希望将一个变量传递给子 make 时,可以使用指示符“unexport”来声明这个变量。
    格式如下:
    unexport VARIABLE ...

    7,vpath

    1,VPATH

    通过变量“VPATH”可以指定依赖 文件的搜索路径,当规则的依赖文件在当前目录不存在时,make 会在此变量所指定的,目录下去寻找这些依赖文件。通常我们都是用此变量来指定规则的依赖文件的搜索路 径。其实“VPATH”变量所指定的是 Makefile 中所有文件的搜索路径,包括了规则的 依赖文件和目标文件。定义变量“VPATH”时,使用空格或者冒号(:)将多个需要搜索的目录分开。

    example

    VPATH = src:../headers

    这样我们就为所有规则的依赖指定了两个搜索目录,“src”和“../headers”。对于规则 “foo:foo.c”如果“foo.c”存在于“src”目录下,此规则等价于“foo:src:/foo.c”。

    2,vpath

    它 不是一个变量,而是一个 make 的关键字,它所实现的功能和上一小节提到的“VPATH” 变量很类似,但是它更为灵活。它可以为不同类型的文件(由文件名区分)指定不同的 搜索目录。它的使用方法有三种:

    1)、vpath PATTERN DIRECTORIES 为所有符合模式“PATTERN”的文件指定搜索目录“DIRECTORIES”。多个目 录使用空格或者冒号(:)分开。类似上一小节的“VPATH”变量。

    2)、vpath PATTERN 清除之前为符合模式“PATTERN”的文件设置的搜索路径。

    3)、vpath 清除所有已被设置的文件搜索路径。

  • 相关阅读:
    QT学习笔记2
    QT学习笔记1
    图像中区域生长算法的详解和实现
    图像识别中的深度学习 转
    Appium基础环境搭建(windows)---基于python
    selenium实现文件上传方法汇总(AutoIt、win32GUI、sengkeys)---基于python
    selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python
    水仙花数---基于python
    九九乘法表实现---基于python
    selenium元素定位不到之iframe---基于python
  • 原文地址:https://www.cnblogs.com/zhiminyu/p/15868601.html
Copyright © 2020-2023  润新知