【转】多层级的makefile编写——递归调用makefile

2023-10-26

转自:

多层级的makefile编写——递归调用makefile - wangyuling1234567890的专栏 - 博客频道 - CSDN.NET  

http://blog.csdn.net/wangyuling1234567890/article/details/22111271

 

文件层级结构:

│  Makefile
│  tmp

├─include
│      public.h

└─src
    ├─moda
    │      Makefile
    │      moda.c
    │      moda.h
    │
    └─modb
            Makefile
            modb.c
            modb.h

public.h

 

[cpp]  view plain  copy
 
  1. #define MAX_SIZE 10  
 


moda.c  (modb.c类似)

 

 

[cpp]  view plain  copy
 
  1. #include <stdio.h>  
  2. #include "moda.h"  
  3. #include "public.h"  
  4.   
  5. int main(void)  
  6. {  
  7.     printf("This is mod A, MAX_SIZE:%d \n", MAX_SIZE);  
  8.     return 0;  
  9. }  

 

 

顶层makefile:

 

[cpp]  view plain  copy
 
  1. CC = gcc  
  2.   
  3. ROOT := $(shell pwd)  
  4. INCLUDE := $(ROOT)/include  
  5. SRC := $(ROOT)/src  
  6.   
  7. USR_SUB_DIR := $(SRC)/moda $(SRC)/modb  
  8.   
  9. default:usr  
  10.   
  11. usr:  
  12.     @for n in $(USR_SUB_DIR); do $(MAKE) -C $$n ; done  
  13.       
  14. clean:  
  15.     @for n in $(USR_SUB_DIR); do $(MAKE) -C $$n clean; done  


moda目录下makefile

 

 

[cpp]  view plain  copy
 
  1. CC = gcc  
  2.   
  3. ROOT := $(shell pwd)/../..  
  4. INCLUDE := $(ROOT)/include  
  5.   
  6. CFLAGS += -I$(INCLUDE)  
  7.   
  8. target:moda  
  9.   
  10. modb:moda.o  
  11.     $(CC) -o moda moda.o  
  12.   
  13. modb.o:moda.c  
  14.     $(CC) $(CFLAGS) -c moda.c   
  15.       
  16. clean:  
  17.     -rm *.o moda  


执行:

 

 

[cpp]  view plain  copy
 
  1. linux:/mnt/hgfs/vmware-share/makefile # <strong><span style="color:#000099;">make </span></strong>  
  2. make[1]: Entering directory `/mnt/hgfs/vmware-share/makefile/src/moda'  
  3. gcc -I/mnt/hgfs/vmware-share/makefile/src/moda/../../include   -c -o moda.o moda.c  
  4. gcc   moda.o   -o moda  
  5. make[1]: Leaving directory `/mnt/hgfs/vmware-share/makefile/src/moda'  
  6. make[1]: Entering directory `/mnt/hgfs/vmware-share/makefile/src/modb'  
  7. gcc -I/mnt/hgfs/vmware-share/makefile/src/modb/../../include -c modb.c   
  8. gcc -o modb modb.o  
  9. make[1]: Leaving directory `/mnt/hgfs/vmware-share/makefile/src/modb'  
  10. linux:/mnt/hgfs/vmware-share/makefile #  
  11. linux:/mnt/hgfs/vmware-share/makefile # <strong><span style="color:#000099;">cd src/moda/</span></strong>  
  12. linux:/mnt/hgfs/vmware-share/makefile/src/moda # <strong><span style="color:#000099;">ll</span></strong>  
  13. 总用量 5  
  14. drwxrwxrwx  1 root root    0 2014-03-25 23:51 .  
  15. drwxrwxrwx  1 root root    0 2014-03-25 23:10 ..  
  16. -rwxrwxrwx  1 root root  219 2014-03-25 23:30 Makefile  
  17. -rwxrwxrwx  1 root root 6803 2014-03-25 23:51 moda  
  18. -rwxrwxrwx  1 root root  149 2014-03-25 23:39 moda.c  
  19. -rwxrwxrwx  1 root root    0 2014-03-25 23:10 moda.h  
  20. -rwxrwxrwx  1 root root  908 2014-03-25 23:51 moda.o  
  21. linux:/mnt/hgfs/vmware-share/makefile/src/moda # <strong><span style="color:#000099;">./moda</span></strong>  
  22. This is mod A, MAX_SIZE:10  
  23. <pre code_snippet_id="256920" snippet_file_name="blog_20140325_5_2131557" name="code" class="cpp">linux:/mnt/hgfs/vmware-share/makefile #  
  24. linux:/mnt/hgfs/vmware-share/makefile #  
  25. linux:/mnt/hgfs/vmware-share/makefile #</pre>linux:/mnt/hgfs/vmware-share/makefile # <strong><span style="color:#000099">make clean</span></strong><br>  
  26. make[1]: Entering directory `/mnt/hgfs/vmware-share/makefile/src/moda'<br>  
  27. rm *.o moda<br>  
  28. make[1]: Leaving directory `/mnt/hgfs/vmware-share/makefile/src/moda'<br>  
  29. make[1]: Entering directory `/mnt/hgfs/vmware-share/makefile/src/modb'<br>  
  30. rm *.o modb<br>  
  31. make[1]: Leaving directory `/mnt/hgfs/vmware-share/makefile/src/modb'<br>  

转载于:https://www.cnblogs.com/sikongluoxing/p/7068570.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【转】多层级的makefile编写——递归调用makefile 的相关文章

  • FreeRTOS(任务管理的创建、删除、挂起、恢复)

    目录 一 任务的基本概念 二 任务状态的概念 1 Running 运行态 2 Ready 就绪态 3 Blocked 阻塞态 4 Suspended 挂起态 三 任务状态的切换 四 系统启动 1 vTaskStartScheduler 函数
  • IOS数据管理

    在 iOS 中 没有直接与 Android 中的 SharePreference 相对应的概念 而是使用不同的机制来处理应用程序的持久化数据 在 iOS 中 你可以使用以下几种方法来保存和读取应用程序的数据 UserDefaults 用户默
  • Halcon (64位)无法卸载或者卸载不彻底,没法再次安装?

    以管理员身份 切换到cmd 1 删除安装目录 rmdir S HALCONROOT 2 查询安装的Halcon版本 reg query HKLM SOFTWARE Wow6432Node MVTec HALCON Windows x64 3
  • 面试常用算法归纳

    面试常用算法归纳 算法时间复杂度 二叉查找树的时间复杂度 递归和分治 递归思维 汉诺塔问题 排序算法 最长子串 子序列 一维dp 有断层 最长递增子序列 最大子数组和 无重复字符的最长子串 买卖股票的最佳时机 二维dp 组合 子集 和排列
  • YOLOv5改进算法之添加CA注意力机制模块

    目录 1 CA注意力机制 2 YOLOv5添加注意力机制 送书活动 1 CA注意力机制 CA Coordinate Attention 注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制 CA 注意力机制的核心思想是引
  • Atmel Studio 7.0 快速上手指南(基于ASF)

    Atmel Studio 7 0 快速上手指南 基于ASF 程序员大本营 pianshen com
  • 【Kubernetes部署篇】K8s图形化管理工具Dasboard部署及使用

    文章目录 一 Dashboard简介 二 Dashboard部署安装 三 配置Dashboard登入用户 1 通过Token令牌登入 2 通过kubeconfig文件登入 四 Dashboard创建容器 五 扩展 一 Dashboard简介
  • switch...case...和if...else...区别

    switch 和 if 都是用来处理分支语句的 那么使用的时候 考虑到代码效率问题 就必须先来了解他们有什么区别 先来看看这两个语句的使用格式 if else if 表达式1 语句1 else if 表达式2 语句2 else if 表达式
  • Altium Designer (AD) 元器件出现绿色叉叉报错的解决办法

    出现报错的原因 元器件的安全间距小于设定的安全间距 但通常情况下 这个问题并不严重 可以理解为是一个警告 不去处理也可以 解决办法 点击菜单栏的工具 T 再点击复位错误标志 M 即可解决报错
  • 一个爬虫代码价值 7000 万

    一个爬虫代码价值 7000 亿 这样的代码你听说过吗 这是一个爬取比特币密钥的代码 比特币相信大家都有听说过 尤其最近比特币价格还突破了 5 万美元大关 现在1 枚比特币就价值 35 万人民币 难怪有句说 币圈一天 人间一年 最近朋友圈关于
  • 登录,注册HTML页面,详细过程

    1 页面说明 登录和注册切换按钮 当点击登录按钮时 显示登录表单 当点击注册按钮时 显示注册表单 每个表单都有对应的 JavaScript 校验函数 校验用户名 邮箱和密码是否为空 如果为空 会弹出警告框 2 效果图展示 3 代码部分 3
  • 手把手教你快速上手人体姿态估计(MMPose)

    最近在研究如何快速实现图像中人体姿态的估计 也就是常见的pose estimation任务 花了些时间 实际对比了AlphaPose BlazePose和MMPose BlazePose主要为移动端设计 AlphaPose安装配置比较麻烦
  • 服务器显卡驱动重装系统,windows7旗舰版系统重装显卡驱动的方法

    在windows7旗舰版电脑中 我们都是需要安装显卡驱动 但是如果显卡驱动安装不合适的话 就会容易导致电脑出现问题 所以如果有碰到安装到不合适的显卡驱动的话我们可以通过重装显卡驱动来解决 那么该怎么操作呢 为此小编这就给大家讲解一下wind
  • 图片 url blob base64 互转

    待补充 url to blob export const urlToBlob async url string gt return new Promise resolve gt fetch url then res gt res blob
  • Nginx

    HTTP和反向代理web服务器 Nginx是一个高性能的HTTP和反向代理web服务器 同时也提供了IMAP POP3 SMTP服务 Nginx是一款轻量级的Web服务器反向代理服务器及电子邮件 IMAP POP3 代理服务器 nginx反
  • 结合 服务器+后端+前端,完成 vue项目 后台管理系统

    目录 以上是项目的服务器php 后端 前端 已经可以正常运行 一 登录 登录页进度条 戳这里Vue项目电商后台管理系统 nprogress 进度条 活在风浪里的博客 CSDN博客 二 侧导航 三 列表页源码 四 角色分配 五 权限页面开发
  • 多线程实现Runable接口和Callable接口的区别

    先看源码callable接口 返回泛型v 可以抛出异常 Runable接口是抽象方法run 没有返回值 不能抛出异常 有异常在run方法内部处理 总结 区别1 两者最大的区别 实现Callable接口的任务线程能返回执行结果 而实现Runn
  • 交换机电口、光口、网络速率的基本概念总结

    电口和光口 千兆网 万兆网 POE 包转发率 背板带宽 交换容量 光纤跳线 电口和光口 电口 电口也即RJ45口 插双绞线的端口 网线 一般速率为10M或100M 即为百兆工业交换机 部分支持1000M 即为千兆交换机 光口 工业以太网交换
  • python sklearn 梯度下降法_Python与机器学习:梯度下降

    梯度下降 Gradient Descent 梯度下降法不是一个机器学习算法 是一种基于搜索的最优化算法 目的是最小化一个损失函数 同样 梯度上升法用于最大化一个效用函数 求解损失函数的最小值有两种方法 1 正规方程求解 上一章已经讲使用线性
  • java多线程和高并发系列三 & Synchronized锁详解

    目录 设计同步器的意义 如何解决线程并发安全问题 同步器的本质就是加锁 synchronized原理详解 synchronized底层原理 Monitor监视器锁 什么是monitor 对象的内存布局 对象头 对象头分析工具 锁的膨胀升级过

随机推荐

  • Python入门教学——多进程和多线程

    目录 一 线程和进程 1 线程和进程的基本概念 2 线程和进程的关系 3 串行 并行和并发 二 创建多个线程 1 线程相关的模块 2 创建线程 2 1 通过Thread类构造器来创建新线程 2 2 通过继承于Thread类来创建新线程 三
  • Kubernetes 集群使用 NFS 网络文件存储

    文章目录 1 NFS 介绍 2 环境 软件准备 3 Kubernetes HA 集群搭建 4 直接挂载 NFS 5 PV PVC 方式使用 NFS 6 StorageClasses 动态创建 PV 方式使用 NFS 1 NFS 介绍 Kub
  • JDBC实现纵向导出数据库数据

    使用到的技术点 1 Java写文件 2 熟悉JDBC API 3 Java集合ArrayList的使用 4 Java字符串截取 本代码仅供测试 如要使用 需自行增加数据库列类型定义和判定逻辑 DBConnectMySQL java pack
  • 教你如何构建 Linux 内核

    介绍 我不会告诉你怎么在自己的电脑上去构建 安装一个定制化的 Linux 内核 这样的资料太多了 它们会对你有帮助 本文会告诉你当你在内核源码路径里敲下make 时会发生什么 当我刚刚开始学习内核代码时 Makefile 是我打开的第一个文
  • C语言中函数指针、指针函数、结构体中的函数指针的用法和区别

    一 指针函数 定义 指针函数 简单的来说 就是一个返回指针的函数 其本质是一个函数 而该函数的返回值是一个指针 声明格式为 类型标识符 函数名 参数表 这似乎并不难理解 再进一步描述一下 看看下面这个函数声明 int fun int x i
  • OSI七层协议模型及其协议

    文章目录 一 OSI七层模型是什么 其协议有哪些 二 TCP IP四层协议 TCP IP五层协议 OSI七层协议是什么 一 OSI七层模型是什么 其协议有哪些 二 TCP IP四层协议 TCP IP五层协议 OSI七层协议是什么 一 1 O
  • php如何处理高并发请求

    PHP 处理高并发请求的方法 使用异步框架 通过使用异步处理方式 可以有效地降低 PHP 处理请求的响应时间 避免因为 IO 操作而导致的等待阻塞 常用的异步框架有ReactPHP和Swoole等 使用缓存 使用缓存可以减少每个请求都需要访
  • Open3D——RGBD图转化为点云(pcd)并显示

    1 用Open3D分别读取RGB图片和深度图片 彩色图 深度图 2 把Open3D中的RGBD图片转化pcd格式并储存 3 显示点云 直接看代码 Open3D www open3d org The MIT License MIT See l
  • 五款单按键开关机电路图

    转载 https blog csdn net shileiwu0505 article details 114401137 一 单按键开关机电路图 本例电路可实现通过按一次按键S1实现开机 再按一次S1实现关机的功能 整个电路的工作过程 电
  • 详解 TS 中的子类型兼容性

    简介 在写 TypeScript 代码时经常遇到类型检查不通过的问题 这些问题根据编译器给出的错误提示以及修改建议多数可以快速修复 本文讲解的内容是编译器进行类型检查时的兼容性相关检查规则 这些规则在 TypeScript 语言背后默默发挥
  • 刷脸支付用户可以摆脱对手机介质的依赖

    支付宝与微信的刷脸支付设备落地体量约在10万台左右 同时云闪付也在广州 杭州等七个城市陆续上线了 刷脸付 从安装数量看 刷脸设备的总体落地效果理想 现在商家对使用扫码支付服务具有很强的依赖性 且担心刷脸支付因为技术与道德问题而遭遇不必要的麻
  • 【uni-app】响应式单位rpx

    单位 rpx是响应式px rpx是一种根据屏幕宽度自适应的动态单位 以750宽的屏幕为基准 750rpx正好是屏幕的宽度 屏幕变宽 rpx实际显示效果会等比放大 但在App端和h5端 屏幕宽度达到960px时 默认将按照375px的屏幕宽度
  • linux增加nfs的inode,使用NFS时出现nfs_inode_cache占用内存过高问题的解决

    使用NFS时出现nfs inode cache占用内存过高问题的解决 来源 IT165收集 发布日期 2014 04 14 20 52 06 一 现象 运行了使用NFS文件系统的应用程序后 内存缓慢泄漏 最后导致整个服务器的内存全部耗尽 系
  • 向量微积分基础

    本文首发在我的个人博客 https jlice top p 7kemt 欢迎大家前去参观 么么哒 机器学习里经常需要用到向量微积分 向量微积分其实并不难 但大学数学一般不提 导致在看机器学习的一些推导时常常感觉疑惑 机器学习里经常用到标量和
  • python3 华为推送系统接入

    只是后台对接华为推送服务接口对接 前端集成还是请参考官方文档 根据AppID和AppSecret 获取请求token 根据token发送http请求 获取token 请注意token的有效时间 不避免频繁获取 def get access
  • 基于深度学习的小学语文“输出驱动”教学研究课题方案

    目录 一 课题研究的背景与意义 二 课题研究理论依据 三 国内外研究情况
  • CheckStyle使用手册

    介绍 CheckStyle是SourceForge下的一个项目 提供了一个帮助JAVA开发人员遵守某些编码规范的工具 它能够自动化代码规范检查过程 从 而使得开发人员从这项重要 但是枯燥的任务中解脱出来 CheckStyle默认提供一下主要
  • 用VC 6.0实现串行通信的三种方法

    摘要 本文介绍了在Windows平台下串行通信的实现机制 讨论了根据不同的条件用Visual C 设计串行通信程序的三种方法 并结合实际 实现对温度数据的接收监控 在实验室和工业应用中 串口是常用的计算机与外部串行设备之间的数据传输通道 由
  • 数据挖掘常用的基本技术,主要有哪些?

    1 统计学 统计学虽然是一门 古老的 学科 但它依然是最基本的数据挖掘技术 特别是多元统计分析 如判别分析 主成分分析 因子分析 相关分析 多元回归分析等 2 聚类分析和模式识别 聚类分析主要是根据事物的特征对其进行聚类或分类 即所谓物以类
  • 【转】多层级的makefile编写——递归调用makefile

    转自 多层级的makefile编写 递归调用makefile wangyuling1234567890的专栏 博客频道 CSDN NET http blog csdn net wangyuling1234567890 article det