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个人网站?

