Makefile:调用shell脚本和嵌套调用多项目编译(九)

1、Makefile中调用shell脚本
  • Makefile中可以通过使用$(shell 指令)的方式调用shell脚本
  • a指令:输出当前文件夹下的所有文件
  • b指令:输出当前路径
  • c指令:如果当前目录下不存在abc文件那么创建一个abc的文件
a=$(shell ls ./)
b=$(shell pwd)
filename=abc# 如果不存在abc文件则创建一个abc文件
c:=$(shell if [ ! -f $(filename) ];then touch $(filename);fi;)show:@echo $(a)@echo $(b)@echo $(c)clean:${RM} abc# make show 输出
Makefile 
/home/xxx/xxxx/05-shell
2、Makefile中嵌套调用的多项目同时编译

准备一个如下所示的文件夹:

  • 文件夹1:4个.cpp文件,1个Makefile
  • 文件夹2:3个.c文件,1个Makefile
  • Makefile-head文件:1和2下的Makefile通过include 包含这个头文件(包含的本质是将代码拷贝过来),只不过Makefile-head是1和2都能用到的共同部分
  • 主要目标是通过最外面的Makefile调用1和2下的Makefile
    在这里插入图片描述
2.1 .1/Makefile、.2/Makefile、Makefile-head
  • ./1/Makefile
tar=d
include ../Makefile-head
  • ./2/Makefile
tar=z
include ../Makefile-head
  • ./Makefile-head
src=$(wildcard ./*.cpp ./*.c)
obj =$(patsubst ./%.cpp,./%.o,$(src))
obj:=$(patsubst ./%.c,./%.o,$(obj))$(tar):$(obj)${CXX} $^ -o $@clean:${RM} $(tar) *.o.PHONY: clean $(tar)
2.2、./Makefile
  • make和$(MAKE)是同一个东西,不过是一个使用的系统常量
  • 每个目标下的两条指令是相同的含义,只不过执行的路径不一样
a:make -C ./1 -f Makefile$(MAKE) -C ./2clean:make -C ./1 -f Makefile clean$(MAKE) -C ./2 clean

在这里插入图片描述

2.3、改进
  • 首先声明DIR指定需要执行的文件夹
  • .PHONY是为了防止伪目标
  • ALL: 表示需要生成的所有目标,依赖$(DIR)
  • 然后$(DIR)需要通过嵌套调用的指令执行
  • clean的过程是一个调用shell指令循环的过程
DIR=./1 ./2
.PHONY: 1 2
ALL: $(DIR)$(DIR):make -C $@ -f Makefileclean:@echo $(shell for dir in $(DIR); do make -C $$dir clean;done)

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

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

相关文章

MySQL 学习心得和知识总结(五)|MySQL的一般查询日志(general log)

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

LLM:检索增强生成(RAG)

1 Embedding技术 简单地说,嵌入(Embedding)思想可以视为一种尝试通过用向量来表示所有东西的“本质”的方法,其特性是“相近的事物”由相近的数表示。 1.1 文本向量(Text Embedding) 在GPT中,文本嵌入(Text Embedding)是通过将输入文本中的每…

搭建跨境电商电商独立站如何接入1688平台API接口|通过1688API接口采集商品通过链接搜索商品下单

接口设计|接口接入 对于mall项目中商品模块的接口设计,大家可以参考项目的Swagger接口文档,以Pms开头的接口就是商品模块对应的接口。 参数说明 通用参数说明 参数不要乱传,否则不管成功失败都会扣费url说明……d.cn/平台/API类型/ 平台&…

WEB 工程路径

WEB 工程路径 相对路径 使用相对路径来解决, 一个非常重要的规则:页面所有的相对路径,在默认情况下,都会参考当前浏览器地址栏的路径 http://ip:port/工程名/ 资源来进行跳转。 相对路径带来的问题 如上图,若在a.h…

黄锈水过滤器 卫生热水工业循环水色度水处理器厂家工作原理动画

​ 1:黄锈水处理器介绍 黄锈水处理器是一种专门用于处理“黄锈水”的设备,它采用机电一体化设计,安装方便,操作简单,且运行费用极低。这种处理器主要由数码射频发生器、射频换能器、活性过滤体三部分组成,…

MySQL的基本操作(超详细)

👨‍💻作者简介:👨🏻‍🎓告别,今天 📔高质量专栏 :☕java趣味之旅 📔(零基础)专栏:MSQL数据库 欢迎🙏点赞&…

execl产品排行分析

产品排行分析 1.原数据 2.透视表 选择日期--数据--组合 效果如下: 修改透视表排版: 3.提取数据 将需要分析的数据拷贝至新的表中: 4.排序 1996年度进行排序 效果 添加名次 效果 同理处理1997年度数据和排行 新增一列: 名次变…

源聚达科技:抖音开网店步骤难吗

在数字化浪潮的推动下,抖音平台不仅成为了人们娱乐休闲的好去处,更是许多创业者眼中的“金矿”。然而,对于初次尝试在抖音开设网店的朋友来说,难免会对开店流程感到疑惑。究竟开设一个抖音网店的难度如何呢?让我们一探究竟。 要明…

04 Python进阶:MySQL-PyMySQL

什么是 PyMySQL? PyMySQL 是一个用于 Python 的纯 Python MySQL 客户端库,提供了与 MySQL 数据库进行交互的功能。PyMySQL 允许 Python 开发人员连接到 MySQL 数据库服务器,并执行诸如查询、插入、更新和删除等数据库操作。 以下是 PyMySQL …

SSL证书有哪些种类?有免费的吗?

SSL证书主要有以下几种类型: 1. 域名验证型SSL证书 (DV SSL): - 仅对申请者的域名所有权进行验证,无需人工验证申请单位的真实身份。 - 审核快速,通常适用于个人网站、小型组织或各类加密应用。 2. 组织验证型SSL证书 (OV…

9.动态规划——4.最长公共子序列(动态规划类的算法题该如何解决?)

例题——最长公共子序列(一) 分析 设最长公共子序列 d p [ i ] [ j ] dp[i][j] dp[i][j]是 S 1 S_1 S1​的前 i i i个元素,是 S 2 S_2 S2​的前 j j j个元素,那么有: 若 S 1 [ i − 1 ] S 2 [ i − 1 ] S_1[i-1]S_2[i-1] S1​[i−1]S2​[…

E-魔法猫咪(遇到过的题,做个笔记)

题解: 来自学长们思路: 其中一种正解是写单调队列。限制队列内的数单调递增,方法为每当新来的数据比当前队尾数据小时队 尾出列,直到能够插入当前值,这保证了队头永远是最小值。因此总体思路是队尾不断插入新值的同时 …