Linux-笔记 Makefile简单入门

1、Makefile

        Makefile是一种文本文件,通常用于定义项目的编译规则和依赖关系。它通常与GNU Make工具一起使用,用于自动化软件项目的构建过程。Makefile中包含了一系列规则,每个规则定义了如何生成一个或多个目标文件以及生成这些目标文件所需的依赖关系和命令。通过使用Make工具,用户可以根据Makefile中定义的规则来自动执行编译、链接和其他构建任务,而不需要手动输入每个命令。Makefile的核心是规则的定义,其中包括目标、依赖关系和命令。通常情况下,Makefile中的规则遵循以下格式:

target: dependenciescommandtarget:是一个或多个要生成的目标文件。
dependencies:是生成目标文件所依赖的文件或目标。
command:是生成目标文件所需的命令。

Makefile还能智能的识别哪些文件需要被编译更新,哪些不用。使用make编译Makefile文件,make 命令会在当前目录下查找是否存在“Makefile”这个文件,如果存在的 话就会按照 Makefile 里面定义的编译方式进行编译,make 命令会为 Makefile 中的每个以TAB 开始的命令创建一个 Shell 进程去执行。

2、基础语法举例
1 main: main.o input.o calcu.o    
2     gcc -o main main.o input.o calcu.o
3 main.o: main.c
4     gcc -c main.c
5 input.o: input.c
6     gcc -c input.c
7 calcu.o: calcu.c
8     gcc -c calcu.c
9 
10 clean:
11     rm *.o
12     rm main

上述解析,根据序号:

1 main是目标,冒号后面这些是依赖项,生成main需要依赖这些.o文件,同时,如果要更新目标 main,就必须先更新它的所有依赖文件,如果依赖文件中的任何一个有更新,那么目标也必须更新,“更新”就是执行一遍规则中的命令列表。

2 这条是生成所需命令,同时记住命令列表中的每条命令必须以 TAB 键开始,不能使用空格!执行到这里就会发现需要main.o等.o文件,就会匹配到 3

3 这里又发现mian.o依赖于main.c,就会去执行4的命令

4 执行命令生成mian.o

5-8类似

10 clean清除,没有依赖,所以不会被执行,需要执行输入make clean清除.o文件和main。

总结:

        make命令会在当前目录下查找名为Makefile(或makefile)的文件。一旦找到了Makefile,它将按照其中定义的规则进行编译,生成最终的目标文件。如果目标文件不存在,或者目标文件的依赖项比目标文件更新(即最后修改时间晚),则会执行相应的命令来更新目标文件。

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

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

相关文章

Baidu Comate智能编码助手

Baidu Comate智能编码助手 🎈1.Baidu Comate的简介🎈2.安装Baidu Comate🎈3.Baidu Comate实现功能🎈4.使用注释进行智能代码提示🎈5.结束语 🎈1.Baidu Comate的简介 根据官网的介绍,我们了解到B…

作为一名软件开发,您是否认同“如果代码有效,就不要修复它”这一理论?

请大家关注我的公众号,“老胡聊Java” 这句话非常有道理,因为这句话不仅包含了技术,而且还包含了人情世故。 1 一个项目的代码动辄几千几万行,而且分布的位置也不同,比如有java代码python代码,甚至还可能有…

力扣每日一题113:路径总和||

题目 中等 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSu…

《深入理解kafka》对于实际问题的理解

Q1:消息可靠性(不重不漏) 1.1 如何保证消息不丢 1.2 如何保证消息不重 Q2:积压/消费能力 2.1 线上积压排查思路 2.2 增加消费能力 Q1:消息可靠性(不重不漏) 理解可靠性前。介绍消息语义,即消息传递的标准 标准 丢失 重复 适用…

Redis-3 数据持久化

一.什么是数据持久化? redis是把数据存储在内存中的,而采用DRAM芯片存储的内存会面临断电导致数据丢失的问题,因此我们可以将redis在内存中的数据存储一份到磁盘中,用于内存数据丢失时的恢复,这个过程就叫做数据持久化…

完成单位投稿任务找投稿渠道不用精选10个1个就够了

在单位担任信息宣传员的这几年,我深刻体会到了“笔耕不辍”的艰辛与挑战。起初,面对单位的宣传需求,我遵循传统的投稿路径,即通过电子邮件的方式,一家接一家地向各大媒体投递稿件。那时的我,以为只要稿件质量上乘,自然能够获得青睐,却未曾料到,这是一条漫长而曲折的道路。 邮箱…

算法day03

第一题 179. 查找总价格为目标值的两个商品 本题采用前后指针和单调性规律可解; 解题思路如下: 1、设置前后指针 2、前后指针所指的两数之和大于目标数,右指针左移; 前后指针所指的两数之和小于目标数,左指针右移&…

“视频剪辑新境界:批量高效处理,画面虚化与播放速度调整一气呵成!“

在视频制作的广阔天地中,剪辑是赋予作品生命的关键环节。然而,面对大量的视频素材,如何高效地进行剪辑、调整,使每一帧画面都充满魅力,成为许多创作者面临的挑战。今天,我们为您带来一款颠覆性的视频剪辑工…

学习笔记:【QC】Android Q - IMS 模块

一、IMS init 流程图 高清的流程图参考:【高清图,保存后可以放大看】 二、IMS turnon 流程图 高清的流程图参考:【高清图,保存后可以放大看】 三、分析说明 1、nv702870 不创建ims apn pdp 2、nv702811 nv702811的时候才创建…

Objective-C的对象复制与拷贝选项

对象复制与拷贝 文章目录 对象复制与拷贝copy与mutablecopycopy与mutablecopy的简介示例:不可变对象的复制可变对象的复制 NSCopying和NSMutableCopying协议深复刻和浅复刻浅拷贝(Shallow Copy):深拷贝(Deep Copy&…

同步电机原理解析

同步电机 同步带年纪,顾名思义无论负载如何,都能以恒定的速度运转,它以高效率著称 这种恒速特性是通过恒定磁场和旋转磁场的相互作用实现的,与其他电机一样,同步电机由定子和转子组成,定子铁芯由硅片层叠而…

无人直播需要什么软件系统?最新AI实景自动无人直播软件:智能化引领直播拓客新时代

随着互联网的快速发展(无人直播招商加盟:hzzxar)直播行业已经成为商家品牌推广和商品销售的热门方式。近年来,人工智能技术的飞速发展,催生了一款令人惊叹的AI实景自动无人直播软件,为商家提供了全新的直播…

修改表空间的状态

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 表空间有4种状态:联机、脱机、只读和读写。修改其中某一种状态的语句如下所示 设置表空间 tspace 为联机状态。 SQL>ALTER TABLESPACE space ONLINE: 设置表空间 tspa…

Node.js身份证实名认证接口、身份证识别API

翔云OCR身份证查验集合了身份证号核验,身份信息核验,身份核验。 基于翔云身份证识别接口的Node.js开发示例代码如下: var request require(request); var options {method: POST,url: https://netocr.com/api/recogliu.do,headers: {},fo…

google地图js,添加标记,以及infowindow信息弹窗

&#xff08;谷歌地图版本V3&#xff09; var contentString "<div classdevinfo><P>设备ID: BJ-20240507</p> <P>设备状态: 正常</p> <P>通讯信号: 89% </p> <P>设备位置: 中国</p> <P>剂量率: 988</p&…

鸿蒙开发接口Ability框架:【(StaticSubscriberExtensionAbility)】

StaticSubscriberExtensionAbility StaticSubscriberExtensionAbility模块提供静态订阅者扩展能力的类别的能力。 说明&#xff1a; 本模块首批接口从API version 9 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下…

SpringBoot之Zuul服务

概述 Spring Cloud Netflix zuul组件是微服务架构中的网关组件,Zuul作为统一网关,是所有访问该平台的请求入口,核心功能是路由和过滤。 目前公司业务就是基于Zuul搭建的网关服务,且提供的服务包括转发请求(路由)、黑名单IP访问拦截、URL资源访问时的权限拦截、统一访问日志记…

【退役之重学Java】如何保证从消息队列里拿到的消息顺序执行

一、场景 MySQL binlog 同步数据&#xff0c;比如大数据team。在MySQL中进行增删改查&#xff0c;将其 binlog 发送到 MQ 里面&#xff0c;到消费出来执行&#xff0c;这里就必须要保证其顺序执行&#xff0c;不然数据库就会错乱。 二、如何保证消息的顺序性呢&#xff1f; …

【python】模拟巴特沃斯滤波器

巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;&#xff0c;以其设计者斯蒂芬巴特沃斯&#xff08;Stephen Butterworth&#xff09;的名字命名&#xff0c;是一种具有平滑频率响应的滤波器。这种滤波器在频域中具有非常平坦的无波纹响应&#xff0c;直到它达到截止…

【springboot基础】如何搭建一个web项目?

正在学习springboot&#xff0c;还是小白&#xff0c;今天分享一下如何搭建一个简单的springboot的web项目&#xff0c;只要写一个类就能实现最基础的前后端交互&#xff0c;实现web版helloworld &#xff0c;哈哈&#xff0c;虽然十分简陋&#xff0c;但也希望对你理解web运作…