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工具可以 ...
随机推荐
- Qt 子窗口监听主窗口信号
Qt 子窗口监听主窗口信号(转载) 原文链接:https://www.cnblogs.com/ybqjymy/p/12169762.html 1 MainWindow *ptr = NULL; 2 ...
- 你可能不了解的java枚举
枚举在java里也算个老生长谈的内容了,每当遇到一组需要类举的数据时我们都会自然而然地使用枚举类型: public enum Color { RED, GREEN, BLUE, YELLOW; pub ...
- Mono生命周期小实验
今天在写代码的时候,遇到一个初始化顺序问题,于是做了一个实验,下面记录结果: 情景: 1.在 脚本A中实例化 一个预制体,该预制体挂有脚本B 2.在 脚本A中,获取实例化物体 身上的 脚本B,并且设置 ...
- 【jmespath】—2. 进阶 List and Slice Projections
Projections翻译的话说实话我也不知道翻成什么比较准确,姑且就叫"投影"吧,不过带来的功能确实非常的强大.好用. 首先,我先说下我的理解: 通配符 * 通配符生成的是一个l ...
- CodeForces - 1114D-Flood Fill (区间dp)
You are given a line of nn colored squares in a row, numbered from 11 to nn from left to right. The ...
- Java中nextInt和nextLine同时使用出现的问题
代码: package com.ins1; import java.util.*; public class test { public static void main(String[] args) ...
- graph attention network(ICLR2018)官方代码详解(tensorflow)-稀疏矩阵版
论文地址:https://arxiv.org/abs/1710.10903 代码地址: https://github.com/Diego999/pyGAT 之前非稀疏矩阵版的解读:https://ww ...
- Docker镜像下载很慢,各种加速无效
mcr.microsoft.com/dotnet/...... 改成: dockerhub.azk8s.cn/dotnet/...... 或 mcr.azk8s.cn/dotnet/......
- [算法]类似n sum个数的问题(DP)
题目 求和为target的数组元素组合数,含重复. 例: 输入 arr = { 1, 2, 3, 3, 4 } ,target = 6 输出 4 题解 dp[i][j]代表到数组第i-1个元素,目标和 ...
- 基于JavaScript的表格设计:按序添加或删除班级的学生信息
目的: 制作一个表格,显示班级的学生信息 功能: 鼠标移到不同行,背景色发生改变,离开恢复原背景色 添加.删除按钮,可添加,可删除. 程序流程: 首先先建立绑定事件函数. 其次建立鼠标移动改变背景色函 ...