前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux项目中自动化构建工具-make/Makfile

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

作者头像
薛定谔方程难
发布2024-07-27 10:55:26
120
发布2024-07-27 10:55:26
举报
文章被收录于专栏:我的C语言

守其初心,始终不变。——苏轼


make/Makefile
  • 1、背景介绍
  • 2、简单认识
  • 3、简单原理

1、背景介绍

难道说每次C语言代码写好之后都需要去编写gcc命令,如果有上百个文件去构建的话,那不得麻烦死了。所以有没有简单的做法呢?有!答案就是make/Makefile。

2、简单认识

代码语言:javascript
复制
touch makefile:先简单创建一个文件
vim makefile:进行makefile文件的编写
make:对文件的构建
make clean:对文件的清理(在makefile中写了clean才有用)

3、简单原理

make是一个命令,makefile是一个文件 当我配置好makefile的时候就能够直接运行,进行构建。

配置的内容也不多,都是简单内容,简单的创建一个可运行文件以及能够快速删除一些多余冗杂的内容

第一行称为依赖关系,下一行称为依赖方法。 第一行冒号后的称为依赖文件列表,按照空格为分割。 第一左边叫做目标文件。 第二行的依赖方法中,必须要tab,4个空格开头。 当我们运行make的时候,就会在当前目录之下找makefile,然后根据makefile中的依赖关系,形成目标文件,怎么形成目标文件?就是依赖写的依赖方法来实现目标文件的实现。 怎么理解依赖关系和依赖方法? 例子说明:当你上学的时候,有可能会有过这样的经历。你快到月底没钱吃饭了,此时由于你没钱了,你就打电话给“那位大人”,街上电话你直接说:”爸,我是你儿子“,说完直接一挂。刚刚说的那句话表明的就是我是你儿子,我在上学,我在依赖于你,上学这件事依赖于你,正是因为是爸爸,所以应该给钱,这就是依赖关系。可是站在你爸的视角的话,你直接和他说我是你儿子电话就挂了,你爸会怎么想?你爸也不知道要干嘛啊!所以只表明依赖关系是不够的,你还要告诉你爸你还要干什么。所以,你想了一会发现不对劲,又打回去给你爸,说我没钱吃饭了。这样表明了依赖方法才能够最终实现你的目标文件。 完成一件事情要有两种前提:有依赖关系,能够产生依赖方法 所以还有一个要点,这么解释完之后应该能够理解,并不是make独有的完成事件的方法是有依赖关系和依赖方法,所有的事情都要有这两个条件。 clean中就是没有依赖关系的,能够直接依靠依赖方法来实现所需要的操作。 为什么make直接就是能够生产可执行文件呢?对于make clean为什么又是需要加上clean的呢?

代码语言:javascript
复制
make mytest
make

这两个语句在我写的makefile中表现的结果是一样的。那这又表明什么呢? 其实就是表明makefile在make的指令下,是从上到下扫描makefile,默认形成第一个目标文件。 所以一般在写的时候会把形成可执行程序会放在第一位。能够直接形成可执行程序,方便操作。 当我们执行make的时候执行一次之后在执行make的话,就会出现这样的话。

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

通过改变makefile中的.PHONY来帮助我们。

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

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

代码语言:javascript
复制
stat test.c
stat mytest

其中的Modify的时间就是判断是否需要重新生成可执行程序的重要依据,如果时间比可执行程序晚的话,就需要重新生成,如果比可执行程序时间早的话make就会没有效果。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • make/Makefile
  • 1、背景介绍
  • 2、简单认识
  • 3、简单原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档