【Linux】make/Makefile的使用

news/2024/10/23 7:28:23/

本文目录 

背景简介

使用方法 

为什么执行的指令是make和make clean呢?

 gcc如何判断文件是否需要重新执行?


背景简介

  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefifile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
  • makefifile带来的好处就是——“自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefifile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:DelphimakeVisual C++nmakeLinuxGNUmake。可见,makefifile都成为了一种在工程方面的编译方法。
  • make是一条命令,makefifile是一个文件,两个搭配使用,完成项目自动化构建

使用方法 

make :一个命令 makefile:一个文件(需在当前的源代码路径下)  注:Makefile/makefile 文件均可

 makefile 是一个围绕依赖关系和依赖方法的一个自动化编译的工具

形成:正确关系+正确方法

一个简单的makefile文件

 编写规则:第一行是依赖关系(目标文件对应的依赖关系文件列表可以为空),第二行为依赖方法(注意必须Tab一下编写)

依赖关系:

上面的输出文件myfile,它依赖myfile.c

clean依赖关系的文件列表为空

依赖方法:

gcc myfile.c -o myfile
rm -f myfile

注:

  •  像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。
  • .PHONY:总是被执行的(冒号后面的命令总是被执行的)
  • make 默认执行第一组依赖关系
命令的使用

为什么执行的指令是make和make clean呢?

因为单独使用make: 默认执行第一组依赖关系

下面的使用则需要make + 目标文件执行,如:make myfile / make clean

 gcc如何判断文件是否需要重新执行?

如何判断需要重新执行 : 通过对比时间来进行

标题

 通过stat命令可以显示文件的状态信息:Modify代表文件内容被修改的时间,Change代表文件属性被修改的时间,Access代表最后一次访问文件的时间

我们可以看到,编译后的myfile文件(可执行程序)Modify时间比myfile.c(源文件)Modify时间更晚,gcc通过识别比较源文件和可执行程序Modify时间判断是否需要重新编译。如果可执行程序显示时间更早,说明源文件被修改了,那就需要重新编译,如果源文件显示时间更早,说明可执行程序被修改过,不需要重新编译。


本节完


http://www.ppmy.cn/news/10116.html

相关文章

学习笔记6:字符串库函数(下)

目录 一. strstr模拟实现 二. strtok模拟实现 三.关于strerror和perror的说明 一. strstr模拟实现 库函数strstr函数首部:char * strstr ( const char *str1, const char * str2); 函数的功能是在str1指向的主字符串中寻找子串str2,并且返回主字符串中…

【经典面试题】

TC经典面试题1.赛马问题 WY经典面试题2.:烧香问题 砝码称重问题 有36匹马,6个跑道,在没有计时器的情况下,至少需要赛马多少次,才能比出前三名? 答案:至少需要比较8次。 解题思路: 先把36匹…

2023年中职网络安全竞赛Windows操作系统渗透测试解析(超详细)

B-12:Windows操作系统渗透测试 任务环境说明: 服务器场景:Server2305(关闭链接)服务器场景操作系统:Windows(版本不详)通过本地PC中渗透测试平台Kali对服务器场景进行系统服务及版本扫描渗透测试,并将该操作显示结果中445端口对应的服务版本信息字符串作为Flag值提交…

c++入门(命名空间+缺省参数+函数重载)

文章目录1. 命名空间1. c语言的两个域2. 命名空间的使用1.类型问题命名空间A和B的实现2. 变量问题3.三种访问方法1.指定命名空间访问2. 全局展开using namespace std 的含义尽量不使用using namespace std的原因3. 部分展开2. 缺省参数(备胎)1. 概念2.全缺省参数3.半缺省参数错…

【07】概率图推断之信念传播

概率图推断之信念传播 文章目录将变量消除视为信息传递信息传递算法加总乘积信息传递因子树上的加总乘积信息传递最大乘积信息传递总结在《概率图推断之变量消除算法》中,我们讲了变量消除算法如何对有向图和无向图求P(Y∣Ee)P(Y \mid E e)P(Y∣Ee)的边缘概率。 …

IDEA启动项目通过https进行访问,nginx配置https访问

一、IDEA启动项目通过https进行访问 1、获取证书 证书申请网络有很多方法,这里腾讯云的nginx版证书举列 2、证书转换 springboot是识别p12证书的,所有这里需要吧pem证书进行转换。转换工具OpenSSL-Win64(自行百度下载)下载完…

一步步实现React-Hooks核心原理

React Hooks已经推出一段时间,大家应该比较熟悉,或者多多少少在项目中用过。写这篇文章简单分析一下Hooks的原理,并带大家实现一个简易版的Hooks。 这篇写的比较细,相关的知识点都会解释,给大家刷新一下记忆。 Hooks…

回顾2022年的历程,展望2023年目标

这里写目录标题回顾2022年博客之星你参加了吗?学习方面写博客方面在涨粉丝方面展望2023回顾2022年 时间如梭,转眼间已经2023年了。 你开始做总结了吗? 博客之星你参加了吗? 这是 2022 博客之星 的竞选帖子, 请你在这…