【Linux】Linux项目自动化构建工具 make/Makefile

news2024/11/16 17:38:06

目录

1. Makefile 是如何工作的

2. 依赖关系与依赖方法

3. .PHONY

4. Makefile 的特殊符号 

写在最后:


1. Makefile 是如何工作的

make 是一个命令。

Makefile 是一个文件,当前目录下的一个文件。

我们先来上手写一个简单的 Makefile 文件,

1. 创建一个叫 Makefile 的文件(首字母可以小写)

2. 编辑这个文件

mycode:mycode.c

mycode:mycode.c,这是个什么?

我们在当前目录下创建了一个叫做 mycode.c 的文件,

这句话的意思是将 mycode.c 文件编译成 mycode,中间用 :隔开,

我们称这个为依赖关系。 

那具体怎么编译呢?

gcc -o mycode mycode.c

下面的 gcc -o mycode mycode.c 就叫做依赖方法。

写完之后保存退出。 

我们把 mycode.c 的代码编写好:

然后我们就直接输入 make:

他就会根据我们的依赖关系执行对应的依赖方法,这样就生成了 mycode 可执行程序。

那如果我们不想要这个可执行程序了,该怎么办?直接 rm 吗?好像不太好,

我们再次打开 Makefile 文件:

写一个 clean,不依赖任何东西,然后写好依赖方法,

这样当我保存退出后,直接写入 make clean:

就会自动帮我们使用 clean 的方法。

这样当我们再修改我们 mycode.c 的代码之后,

我们就不用再用 gcc 了,可以直接 make clean;make 就能重新构建可执行程序。

2. 依赖关系与依赖方法

还是拿这个来举例,

mycode 依赖于 mycode.c 

但是光有依赖关系是办不成任何事情的,

所以就有了下面的依赖方法

而 make 就会在当前路径下查找 Makefile 文件,执行这些依赖关系以及他们的方法。

而 make 会自顶向下扫描,第一个文件就会作为他的默认文件,

所以第一个文件是谁,直接 make 就会执行谁。

3. .PHONY

当我们重复的进行 make 的时候,他不让我们编译了,

因为操作系统检测到我们的源文件没有修改,没有必要重新编译,

那我们怎么样才能让他不限制我们呢?

 

我们加上这样一个东西,就是告诉系统,不要管我们:

这样我们随便 make 他就不管我们了。

不过我们不太推荐一直可以编译可执行程序,但是清理工作可以这样设置:

4. Makefile 的特殊符号 

还是以我们之前的写的 Makefile 文件:

$@ 表示的是依赖关系左边的值

$^ 表示的是依赖关系右边的值

通过这两个符号,我们之后就不用手写了,只需要写好依赖关系,

就可以直接使用这两个符号。

Makefile 学会这些就基本够用了。

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

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

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

相关文章

火山引擎AB测试:广告实验深度打通巨量引擎,高效测试广告素材

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近期,火山引擎AB测试DataTester上线了新版的广告AB实验,还推出了与巨量引擎深度打通的能力。用户可以在DataTester中直接进行广告落地页的创…

机器学习:异常检测

问题定义 anomaly,outlier, novelty, exceptions 不同的方法使用不同的名词定义这类问题。 应用 二分类 假如只有正常的数据,而异常的数据的范围非常广的话(无法穷举),二分类这些不好做。另外就…

没钱,没人,没IT,如何成功进行数字化转型?

在数字化时代的浪潮下,技术的迅猛发展为企业和个人带来了前所未有的机遇和挑战。然而,传统的软件开发过程通常需要大量的编程工作,对于非技术背景的人士而言,这是一座高不可攀的技术门槛。如何能够快速地实现创新,推动…

YAML+PyYAML笔记 9 | PyYAML源码之dump(),dump_all(),safe_dump(),yaml.YAMLObject

9 | PyYAML源码之emit,dump,safe_dump,yaml.YAMLObject 1 yaml.dump()2 yaml.dump()3 yaml.safe_dump4 yaml.YAMLObject 1 yaml.dump() 源码: 作用: 将Python对象序列化为YAML流。如果stream为None,则返…

无涯教程-jQuery - Tooltip组件函数

小部件工具提示功能可与JqueryUI中的小部件一起使用。Tooltip用于显示提示。 Tooltip - 语法 $( document ).tooltip(); Tooltip - 示例 以下是显示工具提示用法的简单示例- <!doctype html> <html lang"en"><head><meta charset"utf…

【腾讯云 Cloud Studio 实战训练营】在Cloud Studio上使用React实现学生管理系统

一、前言 为了提升办公效率&#xff0c;越来越多的人开始使用云工作站的方法进行“云办公”了&#xff0c;所谓云办公即把传统意义办公场所转移到网络浏览器中&#xff0c;这样做的好处有&#xff1a; 实现真正的移动化办公&#xff0c;不再受设备、时间、地点等的束缚&#…

最近写了10篇Java技术博客【SQL和画图组件】

&#xff08;1&#xff09;Java获取SQL语句中的表名 &#xff08;2&#xff09;Java SQL 解析器实践 &#xff08;3&#xff09;Java SQL 格式化实践 &#xff08;4&#xff09;Java 画图 画图组件jgraphx项目整体介绍&#xff08;一&#xff09; 画图组件jgraphx项目导出…

Java版知识付费 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台免费搭建

提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含&#xff1a;录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署&#xff0c;免费售后&#xff0c;专业技术指导&#xff0c;支持PC、APP、H5、小程序多终端同步&#xff0c;支持二次开发…

VsCode与Idea编辑器更换背景图

目录 VsCode Idea VsCode 需要安装background插件 安装完成后&#xff0c;打开设置&#xff0c;搜索background 然后就可以在json文件进行图片设置&#xff0c;透明度等等 Idea 打开File -> Settings 然后找到Appearance &#xff0c; 往下滑&#xff0c;找到BackGround …

Android studio实现Button界面跳转

本教程以界面MainActivity跳转到TwoActivity为例 MainActivity对应layout&#xff1a;R.layout.activity_main TwoActivity*对应layout&#xff1a;R.layout.twolayout 1. 建立MainActivity的java文件 package com.example.myapplication;//界面跳转 所需头文件 import andro…

在人工智能的浪潮下,汽车自动驾驶的新发展新可能

原创 | 文 BFT机器人 相信生活在21世纪的人们&#xff0c;没有人会不知道什么是人工智能。如果你不知道&#xff0c;那么你就是被现社会甩在了身后。人工智能从出现到现在&#xff0c;经历了60年的发展&#xff0c;而如今人工智能更如一股大浪潮&#xff0c;席卷了全国各地&am…

Keil5芯片pack包官网下载与安装

1.进入官网 ARM Keil官网链接&#xff1a;https://www.keil.arm.com/ 2.进入CMSIS Packs中选择需要的pack包 输入需要的芯片型号后回车能显示出所有相关型号&#xff0c;或者在输入栏下方列表中查找&#xff1a; 3.下载所需的安装包 找到所需安装包后&#xff0c;右键在…

kernel32.dll如何修复,快速解决kernel32.dll缺失的方法

Kernel32.dll是Windows操作系统中一个重要的系统文件&#xff0c;对于系统的正常运行至关重要。然而&#xff0c;由于各种原因&#xff0c;用户可能会遇到kernel32.dll文件的缺失问题。今天小编就来给大家详细的介绍一下kernel32.dll这个文件&#xff0c;并且详细的介绍一下ker…

[计算机入门] 回收站

2.10 回收站 回收站是Windows 操作系统中一个特殊的文件夹&#xff0c;通常在桌面上以图标的形式表示。 回收站主要作用是为了保护用户的数据免于被意外删除。使用回收站后用户可以避免错误地彻底删除文件&#xff0c;也可以从回收站中恢复它们。如果没有回收站&#xff0c;在…

vue2.x通过指令实现v-debounce和v-throttle防抖节流的实现,亲测可用。

在vue2.x中&#xff0c;防抖和节流一般是通过引入防抖函数debounce和节流函数throtte&#xff0c;对事件回调进行一层包裹&#xff0c;然后在模板中绑定包裹后的事件回调&#xff0c;这样每个需要用的地方都需要进行防抖&#xff0c;节流函数的导入&#xff0c;事件回调的包裹&…

集成kisso框架springboot解决登录不了问题

前端使用 VUE 框架&#xff0c;要求请求头中传入 token值&#xff0c;获取设置token使用cookie操作 import Cookies from js-cookieconst TokenKey token-c export function getToken() {return Cookies.get(TokenKey) } export function setToken(token) {Cookies.set(Token…

【计算机网络】第四章 网络层(一)

文章目录 第四章 网络层4.1 网络层概述4.2 网络层提供的两种服务4.2.1 小结 第四章 网络层 网络层是计算机网络体系结构中的一个关键层&#xff0c;位于传输层上方、数据链路层下方。它负责将传输层提供的数据分割成适当大小的数据包&#xff0c;并在不同网络之间进行路由选择和…

Segment anything(图片分割大模型)

目录 1.Segment anything 2.补充图像分割和目标检测的区别 1.Segment anything 定义&#xff1a;图像分割通用大模型 延深&#xff1a;可以预计视觉检测大模型&#xff0c;也快了。 进一步理解&#xff1a;传统图像分割对于下图处理时&#xff0c;识别房子的是识别房子的模型…

QtC++ 技术分析4 - 流、d-pointer隐式共享以及容器迭代器

目录 QT 中的流文件系统与底层文件操作文件系统类 QFile QTextStreamQDataStreamQLocale 隐式共享与 d-pointer隐式共享d-pointer 在隐式共享中的应用二进制代码兼容d-pointer 模式实现 Qt 容器及迭代器QTL 概述几种常见的迭代器及其对应类型QTL 容器对应迭代器通用算法函子&am…

特性快闪:使用 Databend 玩转 Iceberg

作者&#xff1a;尚卓燃&#xff08;PsiACE&#xff09;澳门科技大学在读硕士&#xff0c;Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer https://github.com/PsiACE 几周前&#xff0c;Databricks 和 Snowflake 召开了各自的年度大会&#xff0c;除了今年一…