Linux 练习三 (Makefile工程管理器)

news2024/11/16 18:09:07

文章目录

  • Makefile工程管理器
    • 第一个makefile:编写两个.c源文件,并且让一个调用另外一个,使用makefile建立依赖,生成可执行文件,并执行。
    • 伪目标
    • 变量
    • 预定义变量和自动变量
    • 通配符和模式匹配
    • 内置函数
    • 循环
    • 指定makefile文件
    • 综合实例:将所有.c文件编译成.o文件

使用环境:Ubuntu18.04
使用工具:VMWare workstations ,xshell

  作者在学习Linux的过程中对常用的命令进行记录,通过思维导图的方式梳理知识点,并且通过xshell连接vmware中ubuntu虚拟机进行操作,并将练习的截图注解,每句话对应相应的命令,读者可以无障碍跟练。第三次练习的重点在于Makefile工程管理器的使用。
  需要提前安装make,即执行sudo apt install make。

Makefile工程管理器

  使用Makefile的步骤非常简单, 先建立一个名为makefile或者是Makefile的文件,然后在里面写入符合语法规则的编译命令,完成以后只需要在文件所在目录使用make命令就能运行编译命令。
在这里插入图片描述

第一个makefile:编写两个.c源文件,并且让一个调用另外一个,使用makefile建立依赖,生成可执行文件,并执行。

请添加图片描述
写法改进:

在这里插入图片描述
  这里对上述命令中修改依赖内容做一下解释,首先依赖是自上而下查找,如果没有main.o或者func.o,就会继续向下找执行下面的编译。其次,如果修改了func.c,不会再将main.c再编译一遍。只会再执行gcc -c func.c生成func.o目标文件。其好处在于可以节省编译器编译的时间,有利于增量编译。

伪目标

  伪目标更倾向于实现其他功能的命令,例如清理二进制文件,重新生成代码等
  伪目标的设计主要是避免中间依赖文件和clean、rebuild重名的情况,执行伪目标的用法和一般目标一样 make [target]
在这里插入图片描述

变量

  Makefile可以定义变量,在调用的时候需要使用**$()**来引用变量,例如可以这么写Makefile文件:

out = main #out代表了main,在运行的时候会进行字符串替代
$(out):main.o func.o
gcc -0 $(out) main.o func.o

  因为 = 定义变量会在执行的时候出现字符串替代,所以出现递归定义的时候,会进行递归展开。但是有些情
况,我们不希望递归展开,只希望进行一次字符串替换,这种情况可以采用 := 来定义变量,这也是工作当中
的主流用法。

out := main #out代表了main,在定义完成的时候会进行字符串替代
$(out):main.o func.o
gcc -o $(out) main.o func.o

预定义变量和自动变量

  预定义变量就是内部顶一个好的变量,这些变量的含义是固定的,如下:

在这里插入图片描述
  自动变量就是某些具有特殊含义的变量,它的含义是当前规则有关,如下:
在这里插入图片描述
  我们利用预定义变量和自动变量改写原来的Makefile文件,如下:

OBJS:=main.o func.o
CC:=gcc
main:$(OBJS)
	$(CC) -o $@ $^
main.o:main.c
	$(CC) -c $^ -o $@
func.o:func.c
	$(CC) -c $^ -o $@

在这里插入图片描述

通配符和模式匹配

因为makefile规则的命令部分是采用bash命令的,所以在这里就可以使用bash的规则来应用通配符

clean:rm-rf*.o

makefile也允许对目标文件名和依赖文件名进行类似正则表达式运算的模式匹配,主要使用的是%匹配符(%
表示在依赖文件列表当中匹配任意字符),例如将上述例子改写成

在这里插入图片描述

内置函数

  1. 使用wildcard函数可以使用通配符,找到所有满足通配符的文件名srcfiles := $(wildcard src/*.c)
  2. 使用subst函数来实现文本替换$(subst from,to,text)
  3. 使用patsubst函数来实现模式文本替换
    $(patsubst pattern,replacement,text)
    $(patsubst %.c,%.o,func.c main.c)
  4. 使用notdir函数可以去除文件路径,只留下文件名

在这里插入图片描述

循环

写法类似其他语言,不再赘述。

LIST = one two three
all:
for i in $(LIST); do echo $$i; done
#等价于
all:
for i in one two three; do echo $i; done

指定makefile文件

内置函数的案例中已经演示了如何自己指定makefile的文件$ make -f newMake

综合实例:将所有.c文件编译成.o文件

在这里插入图片描述
不使用循环的方法,读者自行尝试。

CC:=gcc
SRCS := $(wildcard *.c)
BINS := $(SRCS:%.c=%)
all: $(BINS)
%: %.c
$(CC) $< -o $@
.PHONY:clean
clean:
rm $(TARGETS)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js数组格式字符串处理

文章目录一. 前言二. 数组还原1. 方法一2. 方法二3. 方法三4. 方法四一. 前言 由于数据传输的问题我们常常在请求后拿到数组格式的字符串&#xff0c;一般情况分为以下四种&#xff1a; let str1 ["a","b","c","d"]; // 类型一 let…

【异常解决】The coordinator is not available

问题 最近上线跑了一个flink任务&#xff0c;运行不久&#xff0c;就会挂掉&#xff0c;初步查看日志报错如下 WARN org.apache.flink.connector.kafka.source.reader.KafkaSourceReader [] - Failed to commit consumer offsets for checkpoint 1 org.apache.kafka.clients…

IGBT窄脉冲现象

IGBT窄脉冲现象 tips&#xff1a;资料来自知乎 英飞凌《IGBT窄脉冲现象解读》 IGBT窄脉冲现象 1.什么是窄脉冲现象? 2.窄脉冲现象的原因 3.双脉冲测试IGBT窄脉冲开通 4.FWD窄脉冲开通 1.什么是窄脉冲现象? IGBT作为一种功率开关&#xff0c;从门级信号到器件开关过程…

用Python制作邮件检测器

github地址&#xff1a; https://github.com/CaLlMeErIC/MailDetective 因为需求需要写一个简单的邮件检测系统的框架&#xff0c;这里记录下思路 首先第一反应,这个检测系统不应该是各个邮件收件系统都有自带的吗&#xff0c;于是搜索了下是否有相关的邮件检测开源软件&#…

行测-判断推理-图形推理-样式规律-属性规律-对称性

中心对称&#xff1a;可以看作&#xff0c;图上的每一个点&#xff0c;都能关于中心点&#xff0c;在图上找到另一个对称的点五个图都是轴对称图形&#xff0c;只有答案C是轴对称图形选C都是中心对称图形选A1 3 5中心对称2 4 6轴对称中心对称选B对称轴顺时针45旋转选A对称轴的数…

极智项目 | 实战pytorch arcface人脸识别

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文介绍 实战pytorch arcface人脸识别&#xff0c;并提供完整项目源码。 本文介绍的实战arcface人脸识别项目&#xff0c;提供完整的可以一键训练、测试的项目工程…

微信公众号历史作品定向采集

最近有遇到微信公众号历史作品采集的需求,这里做一下记录, 登录自己注册好的的微信公众号后台进入创作界面,点击右上角的引用: 弹出如下界面: 选择查找公众号文章,输入要查找的公众号: 回车: 同时就可以打开F12开始抓包,选择公众号点击进入: appmsg?action=li…

golang 整合antlr语法校验

1. 背景 在项目中我们可能会遇到表达式检索的场景&#xff0c;例如&#xff0c;输入以下表达式检索&#xff0c;需要解析表达式并得到检索结果。 ip"192.168.1.3" && (port"80" || protocol"http")此时&#xff0c;我们需要对语法进行…

Linux启动过程

theme: channing-cyan 两种启动方式 传统启动方式&#xff08;LEGACYMBR&#xff09; 指传统BIOS启动方式&#xff0c;存在一些不足&#xff1a;比如最大只支持2TB磁盘&#xff0c;磁盘最多四个分区&#xff0c;且不支持图形操作 UEFIGPT方式 是新式的启动方式&#xff0c…

数学小课堂:三次方程(定理发明的过程)

文章目录 引言I 一元三次方程1.1 通解发明权之争1.2 费拉里-塔尔塔利亚公式1.3 Mathematica1.4 数学定理发明的过程引言 学习数学,最重要的是把实际问题变成数学问题,然后知道如何利用各种软件工具来解决。 方程是一个能把具体问题,等量转化成类型问题的好工具。 一元三次方…

Jetson AGX Orin安装Anaconda、Cuda、Cudnn、Pytorch最全教程

文章目录一&#xff1a;Anaconda安装二&#xff1a;Cuda、Cudnn安装三&#xff1a;Pytorch安装一&#xff1a;Anaconda安装 Jetson系列边缘开发板&#xff0c;其架构都是arm64&#xff0c;而不是传统PC的amd64&#xff0c;深度学习的环境配置方法大不相同。想要看amd64的相关环…

智能家居项目(六)之摄像头模块

目录 一、树莓派mipg-streamer实现监控功能调试 1、实现基本思路 2、安装摄像头模块 2.1、在安装sudo apt-get install libv4l-dev 的命令时报错 3、开启摄像头 以下内容是针对树莓派是stretch版本的修改办法&#xff1a; 一、树莓派mipg-streamer实现监控功能调试 1、…

有哪些前端面试题是必须要掌握的

对浏览器的缓存机制的理解 浏览器缓存的全过程&#xff1a; 浏览器第一次加载资源&#xff0c;服务器返回 200&#xff0c;浏览器从服务器下载资源文件&#xff0c;并缓存资源文件与 response header&#xff0c;以供下次加载时对比使用&#xff1b; 下一次加载资源时&#x…

Flow API搭建指南

搭建Flow API&#xff0c;首先需要安装知行之桥EDI系统&#xff0c;注意&#xff0c;Flow API为新增功能&#xff0c;仅在2022版本&#xff08;8336&#xff09;及以后支持&#xff0c;如果你发现正在使用的产品没有这个功能&#xff0c;可以在我们官网下载最新版本或者联系我们…

将企业文件共享解决方案与数据丢失防护配对

您的企业文件共享解决方案是否足够&#xff1f;企业文件共享解决方案已经是一种加密移动中敏感数据的好方法&#xff0c;但仅加密是不够的。 您能否确保不会意外传输敏感信息&#xff1f;您是否可以审核谁发送了什么&#xff1f;最后但并非最不重要的一点是&#xff0c;您是否…

【Autoware】2小时安装Autoware1.13(保姆级教程)

前言&#xff1a;ROS的出现使得机器人软件开发更加快速和模块化&#xff0c;在此基础上&#xff0c;Autoware.ai开源项目可以让我们很容易地将一套完整的自动驾驶软件部署到我们的测试车辆上&#xff0c;并见证它跑起来&#xff01; 文章目录1.Autoware简介2.电脑软硬件配置要求…

爆肝更新 Python 100道基础入门练习题(附答案)

前言 大家早好、午好、晚好吖 ❤ ~ 更多精彩内容、资源皆可点击文章下方名片获取此处跳转 实例001&#xff1a;数字组合 题目&#xff1a; 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; 程序分…

合宙入门教程之luat开发教程

合宙入门教程准备工作连接电脑建工程与烧录测试demo之main.lua实验现象准备工作 1.开发板&#xff08;1块&#xff09; 2.Luatools_v2.exe &#xff08;烧录固件软件&#xff09; 3.USB驱动 跳转合宙官网链接 连接电脑 1.首先安装合宙开发工具&#xff0c;其次安装USB驱动。…

【JAVA】一个项目如何预先加载数据?

这里写目录标题需求实现AutowiredPostConstruct实例CommandLineRunner实例ApplicationListener实例参考需求 一般我们可能会有一些在应用启动时加载资源的需求&#xff0c;局部或者全局使用&#xff0c;让我们来看看都有哪些方式实现。 实现 Autowired 如果是某个类里需求某…

山东大学机器学习期末2022

接力&#xff1a;山东大学机器学习期末2021 本来是不想写的&#xff0c;因为不想回忆起考试时啥也不会的伤痛&#xff0c;没想到最后给分老师海底捞&#xff0c;心情好了一些&#xff0c;还是一块写完 备考建议&#xff1a;多看ppt&#xff0c;多看ppt&#xff0c;多看ppt 山东…