4---自动化构建代码(逻辑梳理,轻松理解)

一、需求引出:

  • 在使用编译器编译代码时,无论我们在一个项目中写了多少个文件(包括头文件、源文件),我们都可以一键完成编译,编译器会自动处理各个文件之间的包含,调用关系。
  • 但是在Linux中,我们在一个目录下写一个项目,如果这个项目包含多个头文件和多个源文件,我们需要将他们手动一个个编译成 ".o" 文件,然后链接生成可执行程序。虽然不会耗费很多时间,但是依旧没有使用编译器那样方便。
  • 而且,如果我们修改了项目中的一部分文件,我们就需要重新编译这些修改的文件。换而言之,我们需要记住每一个被修改过的文件。这未免成本过高,远不如直接使用编译器划算。
  • 所谓自动化构建代码,就是为了解决以上的问题。使得在Linux下也可以像编译器一样,一键将项目编译生成可执行程序。

二、需要的文件和工具:

  • 需要的文件为Makefile文件,直接建立在项目所在目录下。需要注意的是该文件的名称一定要为Makefile或者makefile,不能是其他。
  • 需要的工具是make,它是用来调用makefile文件的。
  • 我们可以简单理解:makefile是一个脚本文件,make是一个脚本解释器。

三、makefile实现简单的自动化构建可执行程序:

3.1详细解析:

  • 第一行:要形成的可执行程序的名称 :需要编译的文件的名称
  • 第二行:tab键开头(不能使用空格替代) 要执行的命令
  • 第一行称为依赖关系,第二行称为依赖方法。通过依赖关系调用依赖方法即可完成自动化调用。
mycode:code.cgcc code.c -o mycode

3.2案例演示:

  • 首先创建一个code.c文件,功能是打印mycode字符串。

        

  • 当前目录下没有可执行程序mycode

        

  • 使用make,自动调用makefile文件中的命令“ gcc code.c -o code.c”

        

  • 查看当前目录,发现生成了可执行程序mycode,并且运行发现可以正常运行。

        

四、makefile实现清理可执行文件、临时文件:

4.1详细解析:

  • 第一行:.PHONY:clean ,表示clean是一个伪目标,将一个命令设置为伪目标,就可以省略他的依赖关系或者依赖方法。
  • 第二行:“clean:”,表示clean命令。
  • 第三行:tab开头 要执行的指令。
.PHONY:clean
clean:rm -f mycode

4.2案例演示:

  • 当前目录存在可执行程序mycode

        

  • 调用makefile文件的clean命令

        

  • 查看目录,发现可执行程序mycode被清理

        

五、如何规范的使用make解释器:

5.1规范使用及细节:

  • 使用make解释器调用makefile文件时,语法为:“make+命令”
  • 可以直接make不加命令,这样使用会直接调用makefile文件的第一个命令,上面第三点构建可执行程序时,就是直接make,可以回顾一下。
  • 一般将clean命令放在makefile文件的结尾。

5.2make解释器自动判断代码新旧:

  • makefile自动化生成可执行程序时,会自动识别代码的新旧,如果在上一次自动化生成可执行程序之后未对代码做出修改,make解释器会拒绝再次自动化构建可执行程序。

        

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

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

相关文章

怎么把学浪课程视频下载到相册

在这个快节奏的学习时代,每一刻的知识获取都显得至关重要。想象一下,在浩瀚如海的学浪app中,你已经找到了那些能够点亮智慧的课程视频,它们不仅充满了启发,还是你求学旅途中的宝贵资源。但是,在网络不稳定或…

【Unity】Unity项目转抖音小游戏(二)云数据库和云函数

业务需求,开始接触一下抖音小游戏相关的内容,开发过程中记录一下流程。 抖音云官方文档:https://developer.open-douyin.com/docs/resource/zh-CN/developer/tools/cloud/develop-guide/cloud-function-debug 1.开通抖音云环境 抖音云地址&a…

2024自动化测试市场分析

大家都说2024年软件测试讲会卷的更厉害,从原来的功能测试到现在自动化测试,那么2024年是否可以学习自动化冲一把,我们先看一下2023年自动化测试在测试行业中的分析: 1.市场需求增长: 随着技术的进步和企业对软件质量的要求日益提高,自动化测试在测试行…

设计模式-结构型-适配器模式-Adapter

地址类 public class Address {public void street() {System.out.println("普通的街道");}public void zip() {System.out.println("普通的邮政编码");}public void city() {System.out.println("普通的城市");} } 荷兰地址类 public class …

Python 开发 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)

什么是 Django 框架 Django 是一个用 Python 编写的 Web 应用程序框架。它提供了许多工具和库,使得开发 Web 应用程序变得更加容易和高效。Django 遵循了“MTV”(模型-模板-视图)的设计模式,将应用程序的不同组件分离开来&#x…

软件测试用例

测试用例的目的:为了实施测试面向测试系统提供的一组集合,这组集合包含:测试环境,操作步骤,测试数据,预期结果等要素 注:测试用例覆盖率越高,说明测试质量越高 测试用例覆盖率越低&…

排序算法及实现(上)

稳定性的判断:如果两个相同大小的元素也进行了交换就是不稳定,否则稳定 1.直接插入排序: 当插入第 i 位置元素时,前面 0 到 i-1 位置的元素已经各自有序。 此时将i 再次从i-1到0位置依次进行比较。找到合适位置将其插入&#x…

唤醒手腕 Go 语言 并发编程、Channel通道、Context 详细教程(更新中)

并发编程概述 ​ 一个进程可以包含多个线程,这些线程运行的一定是同一个程序(进程程序),且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位,线程是调度运行的基本单位&#xff0c…

算法提高之字串变换

算法提高之字串变换 核心思想&#xff1a;双向广搜 双向bfs 建立两个队列 一起bfs到中间态 #include <iostream>#include <cstring>#include <algorithm>#include <queue>#include <unordered_map>using namespace std;const int N 6;int n;…

车载测试和传统测试有什么区别

搞清楚车载测试和传统应用测试的区别,就可以大胆冲冲冲! 车载测试随着市场的需求量增加又火来一波,一直’遥遥领先’的我们一定要告诉大家一个事实:车载测试和传统的应用测试是有很大区别的. 测试对象不一样 传统测试:测试的对象无非就是各种应用,比如电脑端的web系统(使用浏…

Xilinx 千兆以太网TEMAC IP核 AXI4-Lite接口信号

在AX4总线标准中&#xff0c;AXI4-Lite主要由向她址映射型通信。TEMAC的管理法口采用AXI4-Lite标准接口&#xff0c;TEMAC核的AX14-Lite接口信号如表1所示&#xff0c;根据AX14-Lite标准&#xff0c;接口角色分为主接口(Maser Interface)和从接口(Slave Interface)。主接口为通…

手写Windows文件路径获取小工具

手写Windows文件路径获取小工具 目的 给Windows右键增加功能&#xff0c;右键任何文件&#xff08;夹&#xff09;显示复制文件路径的扩展。 效果展示 实现思路 右键调用&#xff0c;自身会把文件路径传递给被调用文件&#xff0c;被调用文件内只需将路径参数复制到剪贴板即…