【Linux】初步使用makefile

makefile

  • 1 快速使用
    • 1.1 认识makefile
    • 1.2 使用makefile
  • 2 深入理解
    • 理解 **依赖关系 与 依赖方法**
    • 如何实现源代码修改了才会重新编译
  • 3 内置符号理解
  • Thanks♪(・ω・)ノ谢谢阅读!!!
  • 下一篇文章见!!!

1 快速使用

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

1.1 认识makefile

makefile 可以实现自动化构建代码工程
首先 来认识一下make makefile
在这里插入图片描述

1.2 使用makefile

我们首先编写一个简单的makefile文件
在这里插入图片描述

我们使用make 命令来执行
在这里插入图片描述
然后我们就成果得到了可执行程序mytest,并可以成功执行。
再通过使用make clean命令 可以成功删除清理mytest.
在这里插入图片描述

2 深入理解

在这里插入图片描述
我们先以前两行讲解:

  1. 依赖方法前必须使用TAB进行开头,不能使用4个空格
  2. make 命令会读取makefile的内容,完成编译/清理工作。
  3. 依赖文件列表可以为空
  4. makefile 从上向下扫描 默认生成第一个目标文件(一般把可执行程序放在开头

在这里插入图片描述
这里 发现 连续两次make 不能成功,但是加上.PHONY 或 源代码更新就可以。
6. .PHONY : XXX 修饰 XXX表示总是被执行(不断make就可以实现了)

理解 依赖关系 与 依赖方法

通过一个故事理解:

月末了,在上大学的小明没有钱了,所以他拨通了那个男人的电话说:爸! 我是你儿子。 这就是表明依赖关系
而此时在爸爸这边只听到了爸! 我是你儿子 ,爸爸非常不理解,你是我儿子咋了?爸爸并不知道小明的需求。所以只表明依赖关系是不够的。
小明也认识到了这点,他再次打了回去:爸! 我是你儿子。我没钱了,给我打点钱。
此时前一句 是表明依赖关系,后一句表明依赖方法,完整表达了意思。

如何实现源代码修改了才会重新编译

在这里插入图片描述

只有源代码的“修改时间” 比 可执行程序 的“修改时间”新 ,才会重新编译。

3 内置符号理解

在这里插入图片描述

$@ 表明 目标文件
$^ 表明 依赖文件列表
$< 代表第一个依赖文件

类似C语言的宏定义,make 时会自动替换

在这里插入图片描述
这样可以递归实现编译的全过程。层层嵌套
在这里插入图片描述
使用变量:
在这里插入图片描述

Thanks♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/472062.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家人们,比赛打完了

啊&#xff0c;终于打完一场比赛了&#xff0c;但还有三场…… 先看看我的战绩&#xff1a; 共八题&#xff0c;AC6题&#xff0c;总共3902分&#xff0c;3.7k人参加&#xff0c;第980名 来看看第一&#xff1a; A8题&#xff0c;我只有2题没做出&#xff0c;相差4000多分&am…

交通管理|交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计…

五、OpenAi之函数调用(Function Calling)(一)

1.函数调用(Function Calling) 学习如何使大语言模型连接到外部工具 1.1介绍 在API调用中&#xff0c;您可以描述函数规范&#xff0c;让模型智能地选择输出包含参数的JSON对象&#xff0c;过程中你以调用一个或多个函数。聊天补全API自身不能调用函数&#xff1b;而是&…

地理信息数据要素价值

文章目录 前言一、地理信息数据成为生产要素的重要内涵二、推动地理信息数据要素价值实现的重点及方式(一)公共地理信息数据(二)企业地理信息数据前言 面对数字经济发展新形势新需求,我们将统筹发展与安全,推动数据资源向数据资产转变,发挥时空数据作为新型生产要素价值…

【上海游戏业:创新与商业的结合】

上海游戏业&#xff1a;创新与商业的结合 我国游戏产业在近年来蓬勃发展&#xff0c;不同城市都涌现出许多优秀的游戏公司。为全面了解中国游戏业的发展情况及地区特色&#xff0c;本文选择分析游戏业较为发达的上海、广州、北京、深圳、成都、杭州、福建七个城市。这些城市在…

SQL拆分字段内容(含分隔符)

问题描述&#xff1a; 在做数据迁移的过程中&#xff0c;我们希望对表中的某个字段根据分隔符进行拆分&#xff0c;得到多条数据&#xff0c;原代码有点意思&#xff0c;因此记录一下。 我们假设某条数据如下&#xff1a; IDSTRS1公司名称不能小于四个字&#xff0c;行业类别…

基于Spring Boot的古典舞在线交流平台设计与实现,计算机毕业设计(带源码+论文)

源码获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1758349555560165377

25.原型链和原型(非常重要),听说你还没搞懂??

1. 对原型、原型链的理解 在JavaScript中是使用构造函数来新建一个对象的&#xff0c;每一个构造函数的内部都有一个 prototype 属性&#xff0c;它的属性值是一个对象&#xff0c;这个对象包含了可以由该构造函数的所有实例共享的属性和方法。当使用构造函数新建一个对象后&a…

w28DVWA-csrf实例

DVWA-csrf实例 low级别 修改密码&#xff1a;修改的密码通过get请求&#xff0c;暴露在url上。 写一个简单的html文件&#xff0c;里面伪装修改密码的文字&#xff0c;代码如下&#xff1a; <html><body><a href"http://dvwa:7001/vulnerabilities/csr…

MySQL学习Day15——MySQL安装与使用

一、Linux下的MySQL的安装与使用: 卸载MySQL: 1.关闭当前MySQL服务:systemctl stop mysql.service 2.查看当前mysql安装状况:rpm -qa | grep -i mysql 3.卸载上述命令查询出的已安装的程序:yum remove mysql-xxx mysql-xxx mysql-xxxx 4.删除mysql相关文件: (1)查找相关文…

[ai笔记7] google浏览器ai学习提效定制优化+常用插件推荐

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第7篇分享&#xff01; 工欲善其事必先利其器&#xff0c;为了ai学习的效能提升&#xff0c;放假期间对google浏览器做了一次系统整改&#xff0c;添加了一些配置和插件&#xff0c;这里既有一些显示、主…

Codeforces Round 919 (Div. 2)题解(A-E)

https://codeforces.com/contest/1920 A Satisfying Constraints 链接&#xff1a;A - Satisfying Constraints 代码 #include <bits/stdc.h> using namespace std; int main() {int T;cin >> T;while(T--){int n;scanf("%d", &n);vector<int&…