GNU make的官方生成依赖例子理解

news/2024/10/21 11:33:55/

GNU make的官方生成依赖例子理解

  • 直接贴代码

直接贴代码

%.d : %.c@set -e; \gcc -MM $< > $@.$$$$; \sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \rm -f $@.$$$$

对于sed ‘s,($).o[ :],\1.o $@ : ,g’ < @ . @. @.$$$ > $@;不是很理解,通过查找资料终于理解啦,写点东西记录一下。

sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@;

这个命令包含将makefile、shell、sed这三个语法的特殊字符交叉在一起,优先级应该是makefile、shell、sed,首先是makefile:

$* # makefile的变量,这个变量表示目标模式中“%”及其之前的部分。
$@ # makefile的变量,表示目标文件。
$< # makefile的变量,表示第一个依赖文件。
$$$$ # $是makefile的特殊字符,如过想让makefile不去解释'$',就可以使用'$$',和转义符'\'意思差不多,告诉makefile我就是'$'没别的意思。'$$$$'也就是两个'$$',这里makefile将'$$$$'认为是'$$'

假设有一个目标为main.d带入上面的规则:

main.d : main.c@set -e; \gcc -MM main.c > main.d.$$; \sed 's,\(main\)\.o[ :]*,\1.o main.d : ,g' < main.d.$$ > main.d; \rm -f main.d.$$

接下开交给shell:

$$: 表示当前的线程id;
\(: '\'在shell中用于转义,得到(';
\): '\'在shell中用于转义,得到')'\.和\1: 这里有个问题,'\.''\1'会不会转义呢?应该是没有转义为'\.''1',应为sed需要使用'\.''\1'

假设当前线程id为1234,带入上面的规则:

main.d : main.c@set -e; \gcc -MM main.c > main.d.1234; \sed 's,(main).o[ :]*,\1.o main.d : ,g' < main.d.1234 > main.d; \rm -f main.d.1234

sed网上有很多资料,理解下面的命令不难

sed 's,(main).o[ :]*,\1.o main.d : ,g' < main.d.1234 > main.d;

http://www.ppmy.cn/news/51711.html

相关文章

人脸检测和行人检测2:YOLOv5实现人脸检测和行人检测(含数据集和训练代码)

人脸检测和行人检测2&#xff1a;YOLOv5实现人脸检测和行人检测(含数据集和训练代码) 目录 人脸检测和行人检测2&#xff1a;YOLOv5实现人脸检测和行人检测(含数据集和训练代码) 1. 前言 2. 人脸检测和行人检测数据集说明 &#xff08;1&#xff09;人脸检测和行人检测数据…

系统集成项目管理工程师——考试重点(三)项目管理一般知识

1.项目定义&#xff1a; 为达到特定的目的&#xff0c;使用一定资源&#xff0c;在确定的期间内&#xff0c;为特定发起人提供独特的产品、服务或成果而进行的一系列相互关联的活动的集合。 2.项目目标&#xff1a; 成果性目标&#xff1a;项目产品本身 约束性目标&…

MATLAB机器学习、深度学习在图像处理中的应用

近年来&#xff0c;随着无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生&#xff0c;人工智能迎来了新一轮的发展浪潮。尤其是在计算机视觉和图像处理领域&#xff0c;各种颠覆性的成果应运而生。 点击查看原文 导师&#xff1a;郁磊副教授&#xff1a;主…

分治与减治算法实验: 排序中减治法的程序设计

目录 前言 实验内容 实验目的 实验分析 实验过程 流程演示 写出伪代码 实验代码 代码详解 运行结果 总结 前言 本文介绍了算法实验排序中减治法的程序设计。减治法是一种常用的算法设计技术&#xff0c;它通过减少问题的规模来求解问题。减治法可以应用于排序问题&…

nodejs+vue 古诗词数字化分享平台

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1nodejs语言简介 7 2.2vue技术 8 2.3 MySQL环境配置 8 2.4 MyEclipse环境配置 9 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第…

线程的运行状态

我们可以通过top指令查看进程的运行状态&#xff0c;里面可以看到进程或者线程的运行状态&#xff0c;其中R代表线程运行&#xff0c;S为可中断的空闲态&#xff0c;其他依次按照字符串对比。 / #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUP…

丁鹿学堂:2023最新vue3学习指南(vue3最简单demo)

通过cdn使用vue3 组件化的思想要始终贯穿vue的开发。 1 通过script的标签方式引入 2 创建根组件 在vue3中&#xff0c;组件可以理解为js对象。 3 组件生成实例 &#xff0c;vue的createApp方法 4 将实力挂载到页面中&#xff0c;mount方法1 代码&#xff1a; <body&…

全注解下的SpringIoc 续2-bean的生命周期

spring中bean的生命周期 上一个小节梳理了一下Spring Boot的依赖注入的基本知识&#xff0c;今天来梳理一下spring中bean的生命周期。 下面&#xff0c;让我们一起看看bean在IOC容器中是怎么被创建和销毁的。 bean的生命周期大致分为四个部分&#xff1a; #mermaid-svg-GFXNEU…