makefile实验二 对目标的深入理解 以及rebuild build clean的实现
(一) 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的实现的更多相关文章
- makefile实验一 make的基本原则、伪目标、以及不使用.PHONY确实现和伪目标一样功能的一种方法
target: echo "hello_Makefile" .PHONY: clean clean: echo "clean Done .2019" 使用伪目标 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- Linux makefile 课程 非常具体的,和理解
最近的一项研究Linux根据C计划,我买了一个电话<Linux环境C编程指南>阅读makefile这使他看起来困惑,我可能无法理解. 于是google到了下面这篇文章. 通俗易懂. 然后把 ...
- 20165236 实验二 《Java面向对象程序设计》实验报告
20165236 实验二<Java面向对象程序设计>实验报告 姓名:郭金涛 学号:20165236 课程:Java程序设计 指导老师:娄嘉鹏 实验时间:2 ...
- 20155228 实验二 Java面向对象程序设计
20155228 实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原 ...
- 2017-2018-1 201552326《信息安全技术》实验二——Windows口令破解
2017-2018-1 201552326<信息安全技术>实验二--Windows口令破解 姓名:刘美岑 学号:20155326 班级:1553班 日期:10.24 一.实验环境 操作系统 ...
- 20172301 《Java软件结构与数据结构》实验二报告
20172301 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...
- 20155303 实验二 Java面向对象程序设计
20155303 实验二 Java面向对象程序设计 目录 一.单元测试和TDD 任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能 任务二:以TDD的方式研究学 ...
- 20169205 2016-2017-2 实验二nmap的使用与分析
20169205 2016-2017-2 实验二Nmap的使用与分析 实验所用知识总结 Nmap扫描基础 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以 ...
随机推荐
- elementUI table怎么实现点击上移下移
其实炒鸡简单... <el-table :data='tableData' > ... ... <el-table-column label="操作" al ...
- Android开发之使一打开activity等界面Edittext获取焦点,弹出软键盘java代码实现
// 获取编辑框焦点 editText.setFocusable(true); //打开软键盘 IInputMethodManager imm = (InputMethodManager)getSys ...
- 遍历查找集合或者数组中的某个元素的值 java代码 详解 Android开发
import java.util.Scanner; public class Test21 { public static void main(String[] args) { //定义并初始化数组 ...
- C#显示百度地图API
http://dev.baidu.com/wiki/static/map/API/examples/?v=1.3&2_0#2&0 太原市的经纬度:112.596, 37.884 北京市 ...
- EventDispatcher
事件分发类,提供事件注册.移除.触发功能 采用delegate.dictionary实现 支持自定义事件.事件采用字符串方式标识 支持 0,1,2,3,4 等5种不同参数个数的回调函数 // 路由 ...
- 深入了解Redis【二】对象及数据结构综述
引言 Redis中每个键值对都是由对象组成: 键总是一个字符串对象(string) 值可以是字符串对象(string).列表对象(list).哈希对象(hash).集合对象(set).有序集合对象(z ...
- 20190925-04Redis五大数据类型之Key 000 025
- jmeter做简单的压测
一.JMeter概述jmeter除了可以做借口测试外,还可以做压力测试:首先介绍jmeter中各个组件在压力测试中扮演的角色 1)线程(Threads(Users))即虚拟用户,线程组里可设置需要模拟 ...
- Django-配置镜像源,虚拟环境详解
0.配源虚拟 全局配源 阿里云镜像站:https://developer.aliyun.com/mirror/ # 在cmd中操作,查找文件 C:\Users\Administrator>pip ...
- virtualbox虚拟机之连接本地主机同时可以连接外部网络
如果主机需要通过ssh,ftp等方式访问linux虚拟机,是无法实现的.这个时候要实现端口互通,我们要用到VirtualBox的端口转发功能.所谓的端口转发功能,就是借助主机上虚拟出来的Virtual ...