Linux项目中自动化构建工具-make/Makfile

发布时间 - 2025-07-22 00:00:00    点击率:

守住初心,始终如一。——苏轼


make/Makefile

1、背景介绍

在编写C语言代码后,如果每次都需要手动编写gcc命令来编译,特别是对于上百个文件的项目来说,确实非常麻烦。幸运的是,有一种更简便的方法——make/Makefile。

2、简单认识

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript touch makefile: 首先创建一个文件 vim makefile: 编辑makefile文件 make: 构建文件 make clean: 清理文件(只有在makefile中定义了clean时才有效) ```

3、简单原理

make是一个命令,Makefile是一个文件。当配置好Makefile后,可以直接运行make进行构建。

配置的内容不多,都是简单的内容,用于创建可执行文件和快速删除多余的冗杂内容。

第一行称为依赖关系,下一行称为依赖方法。冒号后的称为依赖文件列表,按照空格分割。冒号左边称为目标文件。第二行的依赖方法必须以tab(4个空格)开头。当运行make时,会在当前目录下查找Makefile,然后根据其中的依赖关系生成目标文件,依赖方法用于实现目标文件的生成。

如何理解依赖关系和依赖方法?举个例子:当你快到月底没钱吃饭时,你打电话给父母,说“我是你儿子”,然后挂断。这表明你是依赖于父母的,但仅表明依赖关系是不够的,你还需要告诉父母你需要什么,比如“我没钱吃饭了”。这就表明了依赖方法,最终实现你的目标。完成一件事情需要两种前提:有依赖关系,能够产生依赖方法。这不仅是make独有的,所有事情都需要这两个条件。clean中没有依赖关系,直接依靠依赖方法来实现所需操作。

为什么make可以直接生成可执行文件?而make clean需要加上clean呢?

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript make mytest make ```

这两个语句在我的Makefile中表现的结果是一样的。这表明Makefile在make指令下,是从上到下扫描Makefile,默认生成第一个目标文件。因此,通常将生成可执行程序的目标放在第一位,这样可以直接生成可执行程序,方便操作。当我们执行make后,再次执行make时,会出现如下情况:

如果我们不想让它只执行一次后再次执行就不再执行了,该怎么办呢?

通过在Makefile中添加.PHONY来帮助我们。

所以“.PHONY:XXX”的作用是什么呢?表示XXX对应的方法总是要执行的。

为什么Makefile对最新的可执行程序默认不重新生成呢?如何做到的呢?目的是提高编译效率。

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript stat test.c stat mytest ```

其中的Modify时间是判断是否需要重新生成可执行程序的重要依据。如果源文件的修改时间晚于可执行程序的时间,就需要重新生成;如果早于可执行程序的时间,make就不会有任何效果。


# linux  # c语言  # 工具  # 为什么  # JavaScript  # vim  # 自动化  # 可执行  # 可以直接  # 是一个  # 这两个  # 可执行文件  # 的是  # 都是  # 你是  # 第一个  # 两种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  jQuery 常见小例汇总  无锡营销型网站制作公司,无锡网选车牌流程?  高端建站如何打造兼具美学与转化的品牌官网?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何在搬瓦工VPS快速搭建网站?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  重庆市网站制作公司,重庆招聘网站哪个好?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何确保FTP站点访问权限与数据传输安全?  如何快速搭建FTP站点实现文件共享?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何快速查询域名建站关键信息?  轻松掌握MySQL函数中的last_insert_id()  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  iOS中将个别页面强制横屏其他页面竖屏  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  简单实现Android验证码  企业网站制作这些问题要关注  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  jQuery中的100个技巧汇总  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  SQL查询语句优化的实用方法总结  长沙做网站要多少钱,长沙国安网络怎么样?  Python文件操作最佳实践_稳定性说明【指导】  Firefox Developer Edition开发者版本入口  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  JS弹性运动实现方法分析  微信小程序 canvas开发实例及注意事项  Laravel如何使用Eloquent进行子查询  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Android滚轮选择时间控件使用详解  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  C语言设计一个闪闪的圣诞树  如何在七牛云存储上搭建网站并设置自定义域名?  如何在Ubuntu系统下快速搭建WordPress个人网站?