Makefile中变量的定义及赋值

article/2025/10/2 19:27:11

1. 定义变量

Makefile 文件中定义变量的基本语法如下:
变量的名称=值列表

Makefile 中的变量的使用其实非常的简单,因为它并没有像其它语言那样定义变量的时候需要使用数据类型。变量的名称可以由大小写字母、阿拉伯数字和下划线构成。等号左右的空白符没有明确的要求,因为在执行 make 的时候多余的空白符会被自动的删除。至于值列表,既可以是零项,又可以是一项或者是多项。例如: VALUE_LIST = one two three
调用变量的时候可以用$(VALUE_LIST)或者是 ${VALUE_LIST} 来替换,这就是变量的引用。

OBJ = main.o test.o test1.o test2.otest: $(OBJ)gcc $(OBJ) -o app

这就是引用变量后的 Makefile 的编写,比我们之前的编写方式要简单的多。当要添加或者是删除某个依赖文件的时候,我们只需要改变变量OBJ的值就可以了。

2. 变量赋值

Makefile 的变量的四种基本赋值方式如下所示。

(1) 简单赋值 ( := )
编程语言中常规理解的赋值方式,只对当前语句的变量有效

换句话说,前面你对这个变量怎么赋值的我不管,我在这里对它赋值,那它就等于我赋给它的值。

root@xingwei-virtual-machine:/home/xingwei/makefile/03# cat Makefile 
x := xxxxxx
y := $(x)yyyyy
x := cccccccccccccctest:echo x is:> $(x)echo y is:> $(y)

在这里插入图片描述

(2) 递归赋值 ( = )
赋值语句可能影响多个变量,所有目标变量相关的其他变量都受影响。或者这么理解,每次调用变量时,变量的值都会被动态计算

下面的例子中,x = cccccccccccccc 这语句对x的赋值用的是递归赋值,那么 y = $(x)yyyyy 中的x的值,就不是上面一行 x = xxxxxx 对x的赋值,而是x = cccccccccccccc。这体现了“每次调用变量时,变量的值都会被动态计算”的特点,这里的动态,是指x的值从原来的 xxxxxx 变为 cccccccccccccc 了。

root@xingwei-virtual-machine:/home/xingwei/makefile/03# cat Makefile 
x = xxxxxx
y = $(x)yyyyy
x = cccccccccccccctest:echo x is:> $(x)echo y is:> $(y)

在这里插入图片描述

(3) 条件赋值 ( ?= )
如果变量未定义,则使用符号中的值定义变量。如果该变量已经赋值,则该赋值语句无效。

root@xingwei-virtual-machine:/home/xingwei/makefile/03# cat Makefile 
x := xxxxxx
x ?= XXXXXXXX
z ?= cccccccccccccctest:echo x is:> $(x)echo z is:> $(z)

在这里插入图片描述

(4) 追加赋值 ( += )
原变量用空格隔开的方式追加一个新值。

root@xingwei-virtual-machine:/home/xingwei/makefile/03# cat Makefile 
x := xxxxxx
x += XXXXXXXXXXtest:echo x is:> $(x)

在这里插入图片描述

3. 常见的自动变量

变量解析
$@表示目标文件
$^表示所有的前置条件
$<表示第一个前置条件
$(@D)指向 $@ 的目录名
$(@F)指向 $@ 的文件名
$(<D)指向 $< 的目录名
$(<F)指向 $< 的文件名
root@xingwei-virtual-machine:/home/xingwei/makefile/03# cat Makefile 
test: first second third@echo "[\$$@] is:> " $@@echo "[\$$^] is:> " $^@echo "[\$$<] is:> " $<@echo "[\$$(@D)] is:> " $(@D)@echo "[\$$(@F)] is:> " $(@F)@echo "[\$$(<D)] is:> " $(<D)@echo "[\$$(<F)] is:> " $(<F)first: .
second: .
third: .

在这里插入图片描述

更多内置变量,请参考官网。
自动变量

4. 常用的内置变量

Make命令提供一系列内置变量,比如, ( C C ) 指向当前使用的编译器, (CC) 指向当前使用的编译器, (CC)指向当前使用的编译器,(MAKE) 指向当前使用的Make工具。这主要是为了跨平台的兼容性。

内置变量含义
CCC 编译器的名称,默认值为 cc。
CCFLAGSC 编译器的选项。
CPPC 预编译器的名称,默认值为 $(CC) -E。
CPPFLAGSC 预编译的选项。
CXXC++ 编译器的名称,默认值为 g++。
CXXFLAGSC++ 编译器的选项。
FCFORTRAN编译器的名称,默认值为 f77。
FFLAGSFORTRAN编译器的选项。
ccflags-y	:= -DDEBUG
ccflags-y	:= -DVERBOSE_DEBUG
opps-objs	:=oops_test.o
obj-make	:= opps.o
KBUILD_CFLAGS	+=-g
CC = gcc
CCFLAGS = -D_DEBUG -g -m486
test.o: test.c test.h$(CC) -c $(CCFLAGS) test.c

更多内置变量,请参考官网。
内置变量


http://chatgpt.dhexx.cn/article/bA0XcvLG.shtml

相关文章

makefile之.PHONY

1. 版本说明 首先说一下我用的make版本&#xff1a; GNU Make 4.2.1 2. 无PHONY无clean的情况&#xff08;无clean指当前目录下不存在clean文件&#xff09; 文件名&#xff1a;makefile (听说M必须大写&#xff0c;我用小写也可以执行成功) 文件内容&#xff1a; 且目录下…

Makefile文件:Makefile介绍

本文介绍Makefile的一些基本概念以及简单的用法。本文所用的编译器是Hightec tricore v4.9.1.0。 文章目录 1 Makefile的作用2 Makefile的规则3 一个简单的Makefile3.1 帮助文档中的例子3.2 例1&#xff1a;一个简单的Makefile 4 make是如何执行Makefile的4.1 默认目标4.2 例2…

Makefile入门详解

文章目录 一、Makefile简介二、makefile 原理1、当有依赖文件不存在2、当所有依赖文件存在 三、makefile基本规则1.makefile规则三要素2.基本规则3、makfile中的变量3.1普通变量3.2自动变量3.3例程 4、makefile中的伪目标 四、makefile其他常用的规则五、makefile中的函数5.1函…

makefile脚本

文章目录 1.makefile进行工程管理2.文档里面输入的内容3.如何运行这个makefile文件3.makefile 的变量4.其他 1.makefile进行工程管理 先创建一个名称为makefile或者Makefile的文档 2.文档里面输入的内容 输入相应内容的时候&#xff0c;要遵循相应的规则 规则&#xff1a;用…

makefile简介

1.make是一个应用程序 解析源程序之间的依赖关系 根据依赖关系自动维护编译工作 执行宿主操作系统中的各种命令 2.makefile是一个描述文件 定义一系列的规则来指定源文件编译的先后顺序 拥有特定的语法规则&#xff0c;支持函数定义和函数调用 能够直接集成操作系统中的各种命…

makefile变量

1.变量和不同的赋值方式 (1)makefile中支持程序设计语言中变量的概念 (2)makefile中的变量只代表文本数据(字符串) (3)makefile中的变量名规则 变量名可以包含字符&#xff0c;数字&#xff0c;下划线 不能包含“:”&#xff0c;"#"&#xff0c;"“或” " …

Makefile介绍

Makefile 是一种常用于编译的脚本语言&#xff0c;它可以更好更方便的管理你的项目的代码编译&#xff0c;节约编译时间&#xff08;没改动的文件不编译&#xff09;。 注意 Makefile 文件命令必须是 Makefile 或者 makefile&#xff0c;并使用 make 命令编译。 1. 1个…

如何编写一个Makefile文件(手把手的教你)

如果有帮助&#xff0c;希望点赞支持&#xff0c;我会更有创作的动力哦 目录 一、概念理解&#xff08;彩蛋藏在某个地方&#xff09;1.1 什么是Makefile&#xff1f;1.2 为何使用Makefile&#xff1f; 二、实战代码演示与讲解2.1 没有makefile的项目是怎么创建运行的2.1.1 创建…

Makefile入门(超详细一文读懂)

1、Makefile编译过程 Makefile文件中的命令有一定规范&#xff0c;一旦该文件编写好以后在Linux命令行中执行一条make命令即可自动编译整个工程。不同厂家的make可能会稍有不同&#xff0c;并且语法上也有区别&#xff0c;不过基本思想都差不多&#xff0c;主要还是落在目标依赖…

刘玉真先生语录

或问&#xff1a;“古今之法门多矣&#xff0c;何以此教独名‘净明忠孝’ ? ” 先生曰&#xff1a;“别无他说&#xff0c;‘净明’只是正心诚意&#xff0c;‘忠孝’只是扶植纲常。但世人习闻此语&#xff0c;多是忽略过去&#xff0c;此间却务真践实履。” 先生曰&#xff1…

俞敏洪用20年的经验笑谈人生:不要在穷的时候假装崇高

转载于: https://www.huxiu.com/article/174774/1.html 虎嗅注&#xff1a;本文是新东方创始人、洪泰基金联合创始人俞敏洪&#xff0c;于12月1日在麻省理工学院跟学生做的一个主题演讲&#xff0c;言辞幽默&#xff0c;充满智慧&#xff0c;有太多人生的道理。本文由微信公众号…

每日言论:『模仿他人是人生陷阱』

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; 最近&#xff0c;我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神&#xff0c;有兴趣的同学可以加入和我们一起交流技术&#xff0c;在 「奇妙的 Linux 世界」 公…

38岁,外企技术经理,失业:职场遇到瓶颈,你可能掉进了“能力陷阱”!

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 一位读者小R&#xff0c;给我讲述了他的职场经历。 小R&#xff0c;2008年通信专业硕士毕业。先去了华为&#xff0c;做了1年觉得有点苦&#xff0c;就去学了1年英语&#xff0c;后来跳槽到摩托罗拉。…

复旦大学教师 于娟博士《为啥是我得癌症?》

复旦女教师于娟已经去世半年多了&#xff0c;但这篇《为啥是我得癌症&#xff1f;》值得每个人认真阅读。 于娟&#xff0c;女&#xff0c;32岁&#xff0c;祖籍山东济宁&#xff0c;海归&#xff0c;博士&#xff0c;复旦大学优秀青年教师&#xff0c;一个两岁孩子的母亲&a…

《思考致富》不应该指望不经历“暂时的失败”便能发财

目录 作者简介 经典摘录 机遇有个狡猾的习惯&#xff0c;喜欢从后门悄悄溜进来&#xff0c;往往还喜欢以灾难或暂时失败的方式乔装露面 离金矿仅有三英尺远 欲望&#xff1a;成就一切的起点&#xff08;通往致富之路的第一步&#xff09; 信念&#xff1a;在脑海里目睹并坚…

复旦女博士于娟:为啥是我得癌症?

复旦女博士于娟&#xff1a;为啥是我得癌症&#xff1f;【请所有的朋友看看此文】 复旦女教师于娟已经去世半年多了&#xff0c;但这篇《为啥是我得癌症&#xff1f;》值得每个人认真阅读。不要再瞎吃八吃、暴饮暴食、嗜荤如命&#xff0c;不要再拼命工作、天天熬夜&#xff0…

[转载]复旦女博士于娟——为啥是我得癌症? (转)

[转载]复旦女博士于娟——为啥是我得癌症? (转) (2012-07-30 13:47:00) 转载▼ 标签&#xff1a; 转载 黄帝内经之类。就此引用一段话&#xff1a; 下午5--7点酉时 肾经当令 晚上7--9点戌时 心包经当令 9-11点亥时 三焦经当令 11-1点子时 胆经当令 凌晨1--3点丑时 肝经当令 3…

38岁,外企技术经理,失业:职场遇到瓶颈,你可能掉进了“能力陷阱”

一位读者小R&#xff0c;给我讲述了他的职场经历。 小R&#xff0c;2008年通信专业硕士毕业。先去了华为&#xff0c;做了1年觉得有点苦&#xff0c;就去学了1年英语&#xff0c;后来跳槽到摩托罗拉。 呆了12年&#xff0c;自己也熬到了技术经理的岗位。其实&#xff0c;2013年…

于娟《生命日记》——复旦大学教师于娟对大学生健康的建议

下文很长&#xff0c;需要你花点耐心&#xff0c;总结只有一句&#xff1a;珍惜、享受。 “在生死临界点的时候&#xff0c;你会发现&#xff0c;任何的加班&#xff08;长期熬夜等于慢性自杀&#xff09;&#xff0c;给自己太多的压力&#xff0c;买房买车的需求&#xff0c;这…

此生未完成 --- 于娟

文章目录 图书外观好句摘录Part1 病隙日记01 “为啥是我得癌症”的非学术报告02 我的二〇一〇 Part2 人间烟火03 写给我的宝贝04 碎落在身后的时光05 远在天涯06 生为女人 Part3 唯念芳辰07 刹那芳华&#xff1a;于娟的诗 图书外观 好句摘录 Part1 病隙日记 01 “为啥是我得癌…