linuxC--makefile使用变量

    xiaoxiao2025-04-14  30

    使用变量

    定义变量的一般形式:

    变量名 赋值符 变量值 变量名:由字母、数字和下划线组成 赋值符:主要有=、:=、+=、?= 不同的赋值符有不同的意义 变量值:文本字符串

    在含有变量的 makefile 中,make 执行是吧变量名出现的地方用对应的变量值来替换。makefile中的变量类型类似于C语言中的宏。makefile中的变量是区分大小写的,也就是说比那辆"varl" 和 “Varl” 是两个不同的变量。 有些变量是系统预定好的,如: @ 、 @、 @?、$<、#*等

    1. 引用变量

    格式:$(变量名) 或 变 量 名 , 如 果 变 量 值 是 单 字 符 , 可 直 接 使 用 “ {变量名},如果变量值是单字符,可直接使用“ 使变量名” 如果要使用字符 " " , 要 用 " ",要用" ","$"表示。

    2. 定义变量

    makefile 中,有两种类型的变量: ①递归展开变量:通过“=”赋值的变量。 ②立即展开变量:通过“:=”复制的变量。 例 递归展开变量:

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

    运行:

    $ make echo Huh Huh

    整个的替换过程是在执行:echo $(foo) 时完成的。 这种定义方法的好处:在变量为定义时就可以使用该变量。 缺点:可能造成死循环。如:CFLAGS = $(CFLAGS) -O 立即展开变量 例:

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

    这种类型的变量在定义是立即展开,而不是在引用时才展开。 ③条件赋值”?=”:只有此变量在之前没有赋值的情况下才会对变量进行赋值。

    FOO ?= bar

    变量赋值:

    objects = main.o foo.o bar.o utils.o

    该语句定义了一个变量 objects ,其值为一个 .o 列表。 一个变量在定义之后,可以对其值进行追加,这是非常有用的。在 makefile 中使用“+=”(追加赋值符)来实现对一个变量的追加操作。

    onjects += another.o

    3. 预定义变量

    在 makefile 中有许多预定义变量,可以直接使用。在隐含规则中通常会使用预定义变量。 makefile 中还预定义了一组变量,它们的值在 make 运行过程中可以动态改变,是隐含规则所必须的变量,称为自动变量。 常用的自动变量: @ 、 @、 @%、$<。

    最新回复(0)