(一) rebuild build clean的实现

新知识点: 当一个目标的依赖是一个伪目标时,这个伪目标的规则一定会被执行。

贴实验代码

CC := gcc
Target := helloworld.out $(Target) : func.o main.o
$(CC) -o $(Target) main.o func.o main.o : main.c
$(CC) -c main.c -o main.o
func.o : func.c
$(CC) -c func.c -o func.o .PHONY : rebuild clean build rebuild : clean build build : $(Target)
# @echo "build"
clean :
# @echo "clean"
rm *.o $(Target)

好了,现在不看这里的代码,自己实现一遍吧。

实操起来,发现不会?那肯定是对这里的代码没有嚼烂。

我们一起再来反复读读,做到彻底理解,力争能够一句话总结其中的道道。 原理释义,请看下图内文字:

      比较底层的一个目标是Target,偏应用层的两个目标有rebuild、build,

                   把目标Target作为目标build的依赖, 目标build   就直接地具备了触发执行Target目标的能力。

                   把目标build作为目标rebuild的依赖,目标rebuild就间接地具备了触发执行Target目标的能力。 

两句话总结其中的道道:

    将各目标分层理解,哪些偏底层,哪些偏应用,梳理调用关系,从而知道各个目标直接或间接所具备的能力。

              make软件就是这样直接或间接地一层层往底层去找依赖,最终的依赖一定是源文件,然后反推回来,因为源文件发生了变化,所有相关的目标都要被重新make,进而也执行了相关的目标下的所有命令。

(二)对目标的深入理解

实验一中说到一个点,这里再提一遍:

  make软件总是认为目标是对应文件的

好,接下来进行本次实验的第二阶段:

问: 如果把这两处改为main2.o,  修改后的makefile和修改之前,在执行效果上,将有什么变化??

答:(答案见下图中文字)

修改前,目标main.o是存在的,本地的main.o也是存在的,

这时候还要看目标main.o的依赖main.c, 发现main.c也没被修改过,

所以make时,提示:Nothing to be done for 'build'

_

makefile实验二 对目标的深入理解 以及rebuild build clean的实现的更多相关文章

  1. makefile实验一 make的基本原则、伪目标、以及不使用.PHONY确实现和伪目标一样功能的一种方法

    target: echo "hello_Makefile" .PHONY: clean clean: echo "clean Done .2019" 使用伪目标 ...

  2. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  3. Linux makefile 课程 非常具体的,和理解

    最近的一项研究Linux根据C计划,我买了一个电话<Linux环境C编程指南>阅读makefile这使他看起来困惑,我可能无法理解. 于是google到了下面这篇文章. 通俗易懂. 然后把 ...

  4. 20165236 实验二 《Java面向对象程序设计》实验报告

    20165236 实验二<Java面向对象程序设计>实验报告 姓名:郭金涛       学号:20165236      课程:Java程序设计 指导老师:娄嘉鹏       实验时间:2 ...

  5. 20155228 实验二 Java面向对象程序设计

    20155228 实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原 ...

  6. 2017-2018-1 201552326《信息安全技术》实验二——Windows口令破解

    2017-2018-1 201552326<信息安全技术>实验二--Windows口令破解 姓名:刘美岑 学号:20155326 班级:1553班 日期:10.24 一.实验环境 操作系统 ...

  7. 20172301 《Java软件结构与数据结构》实验二报告

    20172301 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...

  8. 20155303 实验二 Java面向对象程序设计

    20155303 实验二 Java面向对象程序设计 目录 一.单元测试和TDD 任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能 任务二:以TDD的方式研究学 ...

  9. 20169205 2016-2017-2 实验二nmap的使用与分析

    20169205 2016-2017-2 实验二Nmap的使用与分析 实验所用知识总结 Nmap扫描基础 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以 ...

随机推荐

  1. 需要分析竞争对手的网站哪些SEO数据

    http://www.wocaoseo.com/thread-10-1-1.html        怎样分析竞争对手的网站?在做网站的前我们会对同行的竞争对手进行研究和分析,对判定同行的关键词竞争程度 ...

  2. Java学习笔记——java基础

    2020.9.1 学习来自 https://www.liaoxuefeng.com/wiki/1252599548343744/1255883729079552 一.变量和数据类型 基本数据类型 基本 ...

  3. Labview学习之路(六)条件结构

    条件结构位于 函数---结构 子选版中.相当于c语言的switch语句, 结构: 分支选择器 分支器标签 分支子框图 可接数据类型 布尔型 布尔常量 真和假   错误信息簇 真和假 整型数值 单值 可 ...

  4. 在Fragment 中拦截返回键

    代码如下: class XXXFrgmt : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ...

  5. 柱状图bar

    1.bar的基本设置宽度和圆角 let box1 = document.getElementById('box1') let myEcharts = echarts.init(box1) let op ...

  6. 01vue.config.js

      const path = require('path'); module.exports = { // 基本路径 publicPath: process.env.NODE_ENV === 'pro ...

  7. Mysql慢查询(配置)

    慢查询?什么鬼?查询很慢吗?刚看一脸萌,学无止境 好吧,就是执行很慢的SQL 什么是慢查询 慢查询定义及作用 慢查询日志,顾名思义,就是查询慢的日志(感觉在说F话),是指Mysql记录所有执行超过lo ...

  8. 小程序里的request

    test.js 代码如下: makeRequest: function (e) { var self = this wx.request({ url: 'http://lt.com/home/inde ...

  9. Euclid's Game(POJ 2348)

    原题如下: Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10832   Accepted: 4 ...

  10. W5300中文手册

    如果链接没了就Q我吧1178875532 链接:https://pan.baidu.com/s/1HcNJN_T6QJCvPWymU1sFDQ 提取码:suBB