0

0

初识Linux · 有关makefile

看不見的法師

看不見的法師

发布时间:2025-06-19 15:47:04

|

498人浏览过

|

来源于php中文网

原创

前言:

我们之前已经介绍了gcc和g++的基本使用方法,并涉及了许多子指令,但手动输入这些指令有时会显得繁琐。此时,自动化工具makefile就显得尤为重要。

可以把makefile理解为编程语言中的宏,它可以简化命令的输入,从而大大减少工程的工作量。因此,makefile的使用不仅可以提高工程的完整性,还能提升效率。

简单来说,makefile是一个自动化命令工具。使用时,首先需要创建一个名为makefile或Makefile的文件,并在其中编写一些指令和操作,以实现自动化。

  1. makefile的简单使用

我们先来看看如何简单使用makefile:

初识Linux · 有关makefile第一步是创建一个makefile文件并添加一些指令,稍后会详细介绍。

初识Linux · 有关makefile第二步,我们来看一个示例代码:

初识Linux · 有关makefile初识Linux · 有关makefile然后,我们只需执行make命令,就可以生成一个名为test的可执行文件,并且运行它也是没有问题的:

初识Linux · 有关makefile初识Linux · 有关makefile此外,clean指令也可以按预期执行。


  1. makefile介绍

我们从makefile文件的第一个要点开始:

初识Linux · 有关makefile第一行的test:test.c,其中test:test.c表示依赖关系,test是目标文件,test.c是被test依赖的文件。

冒号后面的部分称为依赖文件列表,依赖文件可以用空格分隔,也可以为空。依赖方法必须使用Tab键进行缩进,不能使用四个空格,否则会报错。

这里的依赖关系可以类比为父子关系,儿子依赖父亲给钱,依赖方法则是养育。

如果我们重复使用该命令会怎样呢?

初识Linux · 有关makefile第一次执行成功,但之后会显示“test is up to date”,表明test文件已经是最新状态。

这时,我们可以回顾之前提到的文件的ACM时间。

首先查看test.c的ACM时间:

初识Linux · 有关makefile不允许多次执行编译命令的原因是makefile工具会比较源文件和可执行文件的ACM时间。如果可执行文件和源文件的ACM时间有差异,make会检测到源文件已更新,从而重新编译。这样做是为了提高效率,避免反复编译已编译好的文件。

不同自动化工具对时间的判断标准可能不同。例如,VS有时会因为时间判断问题出现bug,重建解决方案后重新运行即可。此时,清空解决方案是为了更新可执行文件的ACM时间,重新比较后发现源代码较新,从而成功编译。

之前介绍的touch命令可以创建文件,看似在这里无用,但它可以更改ACM时间:

初识Linux · 有关makefile因此,想要重复编译,可以通过touch命令更改ACM时间后再编译。

这里引出一个关键词,.PHONY:

初识Linux · 有关makefile我们会发现clean总是可以执行,这就是.PHONY的作用。被.PHONY修饰的指令可以重复执行,因此我们可以重复执行clean。同样,我们可以用.PHONY修饰test:

初识Linux · 有关makefile初识Linux · 有关makefile这样就可以重复编译了。clean也可以重复执行,因为clean是特殊方法,后面不需要跟任何东西:

Android架构基本知识 中文WORD版
Android架构基本知识 中文WORD版

本文档主要讲述的是Android架构基本知识;Android依赖Linux内核2.6来提供核心服务,比如进程管理、网络协议栈、硬件驱动。在这里,Linux内核作为硬件层和系统软件栈层之间的一个抽象层。这个操作系统并非类GNU/Linux的,因为其系统库,系统初始化和编程接口都和标准的Linux系统是有所不同的。 Android 包含一些C/C++库、媒体库、数据库引擎库等等,这些库能被Android系统中不同的组件使用,通过 Android 应用程序框架为开发者提供服务。希望本文档会给有需要的朋友带来帮助

下载

初识Linux · 有关makefile现在我们来探讨一下原理部分,为什么直接make会执行第一个指令?

这是因为makefile的执行顺序是从上到下进行的,所以直接make会默认执行第一个指令。如果我们改变指令的位置:

初识Linux · 有关makefile初识Linux · 有关makefile此时make会执行第一个语句。

学习到这里,你可能会觉得每次执行指令都要显示出来,缺乏神秘感。能否不显示呢?

当然可以,此时用到的符号是@,@可以使指令不显示:

初识Linux · 有关makefile初识Linux · 有关makefile此时执行make后,rm -rf也不会显示:

初识Linux · 有关makefile同理:

初识Linux · 有关makefile初识Linux · 有关makefile所以@只能应用于单个指令,不是多行的。对于echo@,可以这样做:

初识Linux · 有关makefile 这里还有一个有趣的点是,makefile中的注释使用#,并且允许变量的存在,虽然称为变量,但实际上是宏:

初识Linux · 有关makefile执行时实际上是进行替换。

初识Linux · 有关makefile但这样使用会导致上述错误。

需要搭配$使用:

初识Linux · 有关makefile初识Linux · 有关makefile此时就不会有问题了。

这里涉及了替换,我们再看看@和^:

初识Linux · 有关makefile初识Linux · 有关makefile不难看出,@和^分别代表目标文件和依赖文件。

现在又提到了依赖关系,我们来看一段代码:

初识Linux · 有关makefile初识Linux · 有关makefile我们可以发现依赖关系是连着的,因此可以直接创建编译的三个阶段的文件。

既然依赖关系是连着的,尝试打乱顺序会怎样呢?

初识Linux · 有关makefile初识Linux · 有关makefile可以发现,仍然可以创建文件。难道打乱顺序也没有问题吗?

当然不是:

初识Linux · 有关makefile初识Linux · 有关makefile此时只能创建预处理期间的文件,而无法创建可执行文件。凡事都需要一个带头的,因此可执行文件必须放在最前面。

感谢阅读!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1394

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

705

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

295

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

779

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

575

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

548

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

300

2023.07.20

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

381

2023.07.25

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.0万人学习

ASP 教程
ASP 教程

共34课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号