2.变量

来源:互联网 发布:北京哪里有mac专柜 编辑:程序博客网 时间:2024/05/01 19:24

变量的作用域

  1. 局部变量:在规则中声明的变量为局部变量。自动化变量是局部变量。

    # 此时CFLAGES的值是:-gprog: CFLAGES = -g
  2. 全局变量

赋值符号

 =          赋值:=          赋值,但不使用未定义的变量+=          追加赋值override    修饰符,用来保护变量的值。使用该修饰符的变量,其值无法在命令行中进行修改。

自定义变量

自定义的变量跟C语言中的宏一样,文件执行前要进行替换。声明时要赋初值,书写时字符串之间用空格隔开

SRC_C = main.c add.c sub.c

变量可以用来相互赋值。甚至可以使用还未定义的变量进行赋值。

OBJ   = $(patsubst %.c, %.o, $(SRC_C))SRC_C = main.c add.c sub.c

避免使用未定义的变量进行赋值可以使用:=

# OBJ的值为空OBJ  := $(patsubst %.c, %.o, $(SRC_C))SRC_C = main.c add.c sub.c

变量一些特殊的使用方法

  1. 赋值是进行替换

    # 赋值时进行替换的两种方法SRC_C = main.c add.c sub.cOBJ   = $(SRC_C:.c=.o)# 通过**模式匹配**进行替换OBJ   = $(SRC_C:%.c=%.o)
  2. 类似宏的用法

    # all的值为:Tonymy_friend = Tonyfirst     = mysecond    = friendall       = $($a_$b)

自动化变量

在前面已经提到过,自动化变量为局部变量

  • $@:目标文件集,sef.o
  • $^:依赖文件集,删除了重复的文件名。sef.c
  • $+:依赖文件集,未删除重复的文件名。

    sef.o: sef.c    gcc -c %^ -o $@
  • $<:依赖文件集,注意是一个一个的取出来。add.c sub.c sef.c

    # 假设当前目录下有`add.c sub.c sef.c`文件add.o sub.o sef.o: %.o: %.c    gcc -c %< -o %@
  • $*:“%”及其以前的部分。

  • $?:比目标新的依赖文件集。

有特殊意义的变量

MAKECMDGOALS —— 这个变量中会存放你所指定的终极目标的列表,“MAKECMDGOALS”,这个变量中会存放你所指定的终极目标的列表

0 0