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 ./2

clean:
	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 Makefile

clean:
	@echo $(shell for dir in $(DIR); do make -C $$dir clean;done)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

神经网络与深度学习(二)

一、深度学习平台 张量(Tensor) 是一个物理量,对高维(维数 ≥ 2) 的物理量进行“量纲分析” 的一种工具。简单的可以理解为:一维数组称为矢量,二维数组为二阶张量,三维数组为三阶张量 计算图 用“结点”…

Transformer模型-用jupyter演示逐步计算attention

学习transformer模型-用jupyter演示如何计算attention,不含multi-head attention,但包括权重矩阵W。 input embedding:文本嵌入 每个字符用长度为5的向量表示: 注意力公式: 1,准备Q K V: 先 生…

官宣!一文掌握2024百度CreateAI开发者大会最新议程

4月16日上午9:00,以“创造未来”为主题的2024百度Create AI开发者大会将在深圳国际会展中心(宝安)开幕。此次大会将是近十年来,粤港澳大湾区规格最高的AI大会,将聚焦炙手可热的AI话题,在大会主论坛、分论坛…

【JVM】如何定位、解决内存泄漏和溢出

目录 1.概述 2.堆溢出、内存泄定位及解决办法 2.1.示例代码 2.2.抓堆快照 2.3.分析堆快照 1.概述 常见的几种JVM内存溢出的场景如下: Java堆溢出: 错误信息: java.lang.OutOfMemoryError: Java heap space 原因:Java对象实例在运行时持…

Python快速入门系列-10(Python进阶与扩展)

第十章:Python进阶与扩展 10.1 Python与其他语言的整合10.1.1 使用Python的C API示例:使用C API创建一个简单的Python扩展10.1.2 使用Cython加速Python代码示例:使用Cython编写一个快速的矩阵乘法函数10.1.3 使用SWIG创建接口示例:使用SWIG为C++类生成Python接口10.2 Pytho…

【项目实战经验】DataKit迁移MySQL到openGauss(上)

前言 本文将分享DataKit迁移MySQL到openGauss的项目实战,供广大openGauss爱好者参考。 1. 下载操作系统 https://www.openeuler.org/zh/download https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/1a643956 https://support.huawei.com/enterprise…

深入浅出 PyTorch

深入浅出Pytorch 目录: 为什么要学习pyTorch学哪类知识如何学习和掌握PyTorchPyTorch学习路径注意事项 PyTorch 优点 上手快:掌握Numpy和基本深度学习概念即可上手代码简洁灵活:用nn.module封装使网络搭建更方便;基于动态图机…

芒果YOLOv8旋转检测改进《旋转检测必看》提升篇149:从零开始训练 YOLOv8旋转检测教程说明,芒果改进推荐教程

芒果YOLOv8旋转检测改进《旋转检测必看》提升篇149:从零开始训练 YOLOv8旋转检测教程说明,芒果改进推荐教程 本文适用Windows/Linux/Mac:从零开始使用Windows/Linux/Mac训练 YOLOv8 算法项目 - 《旋转检测任务》 专栏完整目录链接&#xf…

编译 amd gpu 核心态驱动 rocm kmd linux kernel

AMD 开源了专门的 ROCm 的kmd Linux Kernel, 1,下载源代码 git clone --recursive https://github.com/ROCm/ROCK-Kernel-Driver.gitcd ROCK-Kernel-Driver/git checkout rocm-6.0.22,配置kernel cp -v /boot/config-$(uname -r) .config make menuconfig Graph…

Smart-Config SpringBoot动态变更配置 单机版apollo

Smart-Config(单机Apollo) 智能配置:单体应用下的动态配置。主要用来解决在单体应用没有配置中心时,想要实现动态变更配置,程序自动处理配置变更,给字段赋值的痛点。可以理解为单机版的Apollo。Apollo是携…

GROBID库文献解析

1. 起因 由于某些原因需要在大量的文献中查找相关内容,手动实在是太慢了,所以选择了GROBID库进行文献批量解析 2. GROBID介绍 GROBID是一个机器学习库,用于将PDF等原始文档提取、解析和re-structuring为结构化的XML/TEI编码文档&#xff0…

Linux笔记之制作基于ubuntu20.4的最小OpenGL C++开发docker镜像

Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像 —— 2024-04-03 夜 code review! 文章目录 Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像1.这里把这本书的例程代码放在了Dockerfile所在的文件夹内以使镜像预装例程代码2.创建Dockerfile3.构建Do…

【Java】Thread详解

🍒前言 本文将从以下几方面来展开对Thread的介绍。 1.线程创建 2.线程中断 3.线程等待 4.线程休眠 在前面的文章中,已经总结了关于Thread的一些理解。 在阅读本文之前,最好对其有一些基础的了解。 文章链接: 【JavaSE】进程是什么&#xff1f…

【Java】线程的状态

在之前的文章中,已经介绍了关于线程的基础知识。 我的主页: 🍆🍆🍆爱吃南瓜的北瓜 文章目录 ✍绪论🍐1.NEW🍐2.TERMINATED🍐3.RUNNABLE--------------------🍐4.WAITING&#x1f350…

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示常规字符应用

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示常规字符应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD12864简…

MySQL版本特性和存储引擎选择

MySQL版本特性和存储引擎选择 1.说一下MySQL 5.5 5.6 5.7 8.0 各个版本的特性 MySQL 5.5 优点: 稳定性:5.5版本是长期支持(LTS)版本,因此它非常稳定,被广泛部署在生产环境中。兼容性:与旧版本的MySQL和…

安达发|建材行业选择APS自动排程软件要遵循哪几点?

在建材行业中,选择合适的APS(高级计划排程)自动排程软件对于提高生产效率、减少浪费、优化资源配置和提升客户满意度至关重要。以下是选择APS自动排程软件时应遵循的几个关键点: 1. 行业特定需求:不同的建材企业可能有…

百卓Smart管理平台 importexport.php SQL注入漏洞复现(CVE-2024-27718)

0x01 产品简介 百卓Smart管理平台是北京百卓网络技术有限公司(以下简称百卓网络)的一款安全网关产品,是一家致力于构建下一代安全互联网的高科技企业。 0x02 漏洞概述 百卓Smart管理平台 importexport.php 接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取数据…

顶象全系列产品升级,对抗AI带来的新威胁

4月2日,在顶象CSDN直播间,最新一期“业务安全大讲堂”上,顶象数据科学家翼龙与资深解决方案专家鳯羽,围绕当前备受关注的AI威胁、人脸风险进行深入分享,并详细介绍针对AI威胁的最新反欺诈技术与安全产品。 AI威胁带来的…

软件设计师27--规范化理论

软件设计师27--规范化理论 考点1:规范化理论基本概念函数依赖规范化理论--Amstrong公理体系候选键主属性与非主属性例题: 考点2:范式判断规范化理论规范化理论 - 范式例题: 考点3:范式分解保持函数依赖分解无损分解模式…