makefile中使用变量

简介: makefile里的变量就像一个变量,变量的作用主要如下: (1)保存文件名列表。 (2)保存编译器的参数。   makefile中的变量是用一个字符串在makefile中定义的,这个文本串就是变量的值。

makefile里的变量就像一个变量,变量的作用主要如下

(1)保存文件名列表。

(2)保存编译器的参数。

  makefile中的变量是用一个字符串在makefile中定义的,这个文本串就是变量的值。只要在一行的开始写下这个变量的名字,后面跟一个‘=’,然后跟要设定的这个变量的 值即可定义变量,下面是定义变量的语法:

              变量名=字符串

使用时 ,把变量把括号括起来。并在前面加上“$”符号,就可以引用变量的值:

              $(变量名)

make解释规则时“变量名”在等式右端展开为定义它的字符串,变量一般在makefile的头部定义。

先让我们看看edit的规则:

edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

  我们可以看到[.o]文件的字符串被重复了两次,如果我们的工程需要加入一个新的[.o]文件,那么我们需要在两个地方加(应该是三个地方,还有一个地方在clean中)。当然,我们的makefile并不复杂,所以在两个地方加也不累,但如果makefile变得复杂,那么我们就有可能会忘掉一个需要加入的地方,而导致编译失败。所以,为了makefile的易维护,在makefile中我们可以使用变量。makefile的变量也就是一个字符串,理解成C语言中的宏可能会更好。  

  比如,我们声明一个变量,叫objects, OBJECTS, objs, OBJS, obj, 或是 OBJ,反正不管什么啦,只要能够表示obj文件就行了。

  我们在makefile一开始就这样定义:

objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

  于是,我们就可以很方便地在我们的makefile中以“$(objects)”的方式来使用这个变量了,于是我们的改良版makefile就变成下面这个样子:

objects = main.o kbd.o command.o display.o \
        insert.o search.o files.o utils.o

edit : $(objects)
    cc -o edit $(objects)
main.o : main.c defs.h
    cc -c main.c
kbd.o : kbd.c defs.h command.h
    cc -c kbd.c
command.o : command.c defs.h command.h
    cc -c command.c
display.o : display.c defs.h buffer.h
    cc -c display.c
insert.o : insert.c defs.h buffer.h
    cc -c insert.c
search.o : search.c defs.h buffer.h
    cc -c search.c
files.o : files.c defs.h buffer.h command.h
    cc -c files.c
utils.o : utils.c defs.h
    cc -c utils.c
clean :
    rm edit $(objects)
View Code

  于是如果有新的 .o 文件加入,我们只需简单地修改一下 objects 变量就可以了。

相关文章
阿里云短信套餐包什么意思?
阿里云短信套餐包是什么意思?短信套餐包就是一次性购买多少条的短信,然后使用时自动从短信套餐包中扣除短信数量。假设你花了6.9元购买了200条的短信套餐包,使用阿里云短信服务平台发送短信,发送了10条,就自动从这个套餐包中扣除已经使用的10条,还剩190条。
465 1
webp格式图片在html里不显示的解决方法
webp格式图片在html里不显示的解决方法
1537 0
webp格式图片在html里不显示的解决方法
|
传感器 监控 安全
智慧工地源码,如何打造智慧工地?
**智慧工地利用传感器和智能系统实现对人员、机械、物料和环境的实时监控,转变安全管理模式,强化预防机制。人员管理通过人脸识别确保实名制,保障工友权益和安全;机械设备安全监控通过实时监测减少高空作业风险;智能穿戴设备如安全帽、手环提升个体防护。此外,系统还涵盖环境监测,确保合规作业,降低行业风险,提高工地整体安全性与效率。**
160 0
智慧工地源码,如何打造智慧工地?
|
Web App开发 iOS开发
无法安装此 app, 因为无法验证其完整性 ,解决方案
无法安装此 app, 因为无法验证其完整性 ,解决方案
|
网络安全 数据安全/隐私保护 安全
SSL证书生成流程
SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。
5640 0
|
机器学习/深度学习 算法 数据挖掘
机器学习【西瓜书/南瓜书】--- 第1章绪论(学习笔记+公式推导)
本博客为博主在学习 机器学习【西瓜书 / 南瓜书】过程中的学习笔记,每一章都是对《西瓜书》、《南瓜书》内容的总结和提炼笔记,博客可以作为各位读者的辅助思考,也可以做为读者快读书籍的博文,本博客对西瓜书所涉及公式进行详细的推理以及讲解,本人认为,不推导公式所学得的知识是没有深度的,是很容易忘记的,有些公式推导起来并不复杂,只是被看似复杂的数学表达式所“吓唬”,希望大家拿上纸笔,跟着博主一起学习,一起推导。
381 0
机器学习【西瓜书/南瓜书】--- 第1章绪论(学习笔记+公式推导)
|
测试技术 Shell Android开发
如何在Android手机上进行自动化测试
如何在Android手机上进行自动化测试
640 0
|
SQL 关系型数据库 测试技术
滴滴打车派单系统思考 数据库设计与实现 - 每月投入6140元, 1天最多可盈利117亿 -_-!
标签 PostgreSQL , 滴滴 , 派单 背景 打车类应用,如果完全按调度系统来派单,而非抢单的话,调度系统要非常的健硕。 比如滴滴打车,如何处理供给双方的需求,并高效的完成派单呢? 随着业务的需求增多,调度规则也会增加,比如拼车,预约,等。
12549 0
|
存储 移动开发 Java
阿里巴巴开源技术汇总:115个软件
云栖社区近期策划了多期和开源产品相关的内容,如GitHub最流行的开源机器学习、大数据等项目,揭秘阿里Weex项目,Hilo开源分析等。深入挖掘,发现开源中国已经收集了数年来阿里115个开源软件,特别分享,也征集大家对后续阿里开源技术选题的建议。
34464 0