8.7.1 makefile实例——项目中的总makefile

2023-11-09

《Linux C程序设计王者归来》第8章构建makefile文件,makefile相当于一种脚本编程语言,用户在编写makefile的过程中可以使用变量、控制结构语句和函数等一般编程语言的特性,同时也可以执行shell指令。makefile诞生的本质目的是实现自动化编译,因此makefile区别于其他编程语言的最大特点是,其执行是由所编译文件的依赖关系驱动的。本章将说细介绍编写makefile的方法。本节为大家介绍makefile实例——项目中的总makefile。

AD:

8.7  makefile实例

本节演示两个makefile的实例,以使读者加深对makefile的理解。通过实例总结本章中涉及到的编写makefile的知识点。

8.7.1  makefile实例——项目中的总makefile

若某个项目的源代码按模块分类分别存储在多个目录下,每个模块的目录内都有各自的makefile文件。其源程序存储的目录结构如下所示。

project目录如下:
 

   
   
  1. hello(目录)  include(目录)  list(目录)  Makefile(makefile文件) 

project/hello目录如下:
 

   
   
  1. hello.c(源代码文件)  Makefile(makefile文件) 

project/include目录如下:
 

   
   
  1. hello.h(头文件)  list.h(头文件) 

project /list目录如下:
 

   
   
  1. list.c(源代码文件)  Makefile(makefile文件) 

由此可以分别写出各目录内的makefile文件。使用该makefile就可以将所有的源文件进行编译,并且生成一个可执行程序。在该makefile中借鉴了shell编程的思想,使用了许多shell命令来帮助makefile执行操作。

(1)在vi编辑器中编辑hello目录下的makefile文件如下。

程序清单8-36  hello目录下的makefile文件
 

   
   
  1. hello: hello.o  # 生成hello  
  2.     gcc hello.o -o hello  
  3. hello: hello.c  # 生成hello.o  
  4.     gcc -c hello.c  
  5. clean:  
  6.     rm -rf hello *.o  
  7. .PHONY: clean 

(2)在vi编辑器中编辑list目录下的makefile文件如下。

程序清单8-37  list目录下的makefile文件
 

   
   
  1. list: list.o    # 生成list  
  2.     gcc list.o -o list  
  3. list.o: list.c  # 生成list.o  
  4.     gcc -c list.o  
  5. clean:  
  6.     rm -rf list *.o  
  7. .PHONY: clean 

现在需要编写project目录中的makefile文件,执行该makefile文件后,可以自动执行每个子目录下的makefile文件。其内容如下,读者可以根据shell脚本来理解该makefile文件。

(3)在vi编辑器中编辑project目录中的makefile文件如下。

程序清单8-38  project目录中的makefile文件
 

   
   
  1. SUBDIRS :list hello                       # 子目录  
  2. all : modules  
  3. .PHONY:all  
  4. modules:  
  5. #进入每个文件夹并执行文件夹中的makefile  
  6.     for dir in $(SUBDIRS);do make -C $$dir || exit 1;done      
  7. .PHONY:modules  
  8. clean:  
  9. #进入每个文件夹并调用makefile中的clean  
  10.     for dir in $(SUBDIRS);do make -C $$dir clean;done  
  11. .PHONY: clean 

(4)执行该makefile文件。

   
   
  1. $make -s 

(5)查看当前每个子目录下的文件变化情况。

   
   
  1. $ls ./hello  
  2. hello  hello.c  hello.o  Makefile  
  3. $ls ./include:  
  4. hello.h  list.h  
  5. $ls ./list:  
  6. list  list.c  list.o  Makefile 

(6)再次执行该makefile文件,不过这次执行clean目标。
 

   
   
  1. $make -s clean 

(7)再次查看当前每个子目录下的文件变化情况。

   
   
  1. $ls ./hello  
  2. hello  hello.cMakefile  
  3. $ls ./include:  
  4. hello.h  list.h  
  5. $ls ./list:  
  6. list  list.c  Makefile 





FROM:  http://book.51cto.com/art/201503/470223.htm

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

8.7.1 makefile实例——项目中的总makefile 的相关文章

  • ModelArts平台部署模型

    相关步骤 构建镜像 上传镜像至swr服务 模型管理建立模型 部署模型上线 调用接口 1 构建自定义镜像 基于Dockfile文件构建 文件准备及文件结构 关于深度学习中的概念 训练 train 以图像识别为例 基于一个标注好的数据集训练好了
  • React-基础语法

    React 基础语法 React 搭建脚手架 安装node JS 安装React脚手架 创建项目 运行项目 其他命令 使用VSCode 安装插件 基础插件 文档目录结构 根组件App js 解析 组件解析 类组件 有状态组件 函数组件 JS
  • 软件测试项目案例哪里找?【银行/教育/商城/金融/等等....】

    项目一 ShopNC商城 项目概况 ShopNC商城是一个电子商务B2C电商平台系统 功能强大 安全便捷 适合企业及个人快速构建个性化网上商城 包含PC IOS客户端 Adroid客户端 微商城 系统PC 后台是基于ThinkPHP MVC
  • ### Paper about Event Detection

    Paper about Event Detection author gr date 2014 03 15 email forgerui gmail com 看一些相关的论文 1 Efficient Visual Event Detecti
  • 【动态规划】最少按多少下开关使灯全亮

    文章目录 无环条件下 题目描述 解题思路 递归版本 迭代版本 有环状态下 题目描述 解题思路 递归版本 迭代版本 无环条件下 题目描述 给定一个数组arr 长度为N arr中的值不是0就是1 arr i 表示第i栈灯的状态 0代表灭灯 1代
  • 介绍:教育研究:定量,定性和混合方法——伯克约翰逊,拉里克里斯滕森著

    www sagepub com bjohnson4e 章节资源的网站
  • 【图形学】GAMES101 Assignment3 作业框架分析

    GAMES101 Assignment3 作业框架分析 文章目录 GAMES101 Assignment3 作业框架分析 rasterizer draw rasterizer rasterize triangle 参考 写作业之前看了一眼代
  • java 多线程学习笔记之 线程互斥

    许多线程共享同一数据 这种情况在现实的生活中也是经常发生的 比如火车站的火车票售票系统 火车票售票系统是一个常年运行的系统 为了满足乘客的需求 我们不能只设一个窗口 必须设很多的售票窗口 每个售票窗口就像一个线程 它们各自运行 共同访问相同
  • GateWay 服务网关

    介绍 Cloud全家桶中有个很重要的组件就是网关 在1 x版本中都是采用的Zuul网关 但在2 x版本中 zuul的升级一直跳票 SpringCloud最后自己研发了一个网关替代Zuul 那就是SpringCloud Gateway Gat

随机推荐

  • 2023年kali linux安装中文输入法

    apt get install fcitx 安装输入法框架 apt get install fcitx googlepinyin 安装谷歌输入法 reboot 重启系统 重启之后右上有个小键盘点击里面的配置 添加google输入法 把Goo
  • vue2.6 Ag-grid 使用

    中文文档 ag grid中文教程 itxst com 一 HTML 结构
  • E3-1230和E3-1230 V2有多神?

    最近追E3 1230 枪E3 1230的人那叫一个多啊 都被捧成神了 我也来说说对E3 1230的看法 同档次的装机方案 我更倾向i5 2320 2500K 3570K 首 先比较两个U的规格吧 E3 1230的主频是3 2G 比i7 26
  • NVIDIA APEX安装完全指南及Megatron-LM/Pytorch运行问题解决(fused_layer_norm_cuda/packaging/amp_C/libc10.so)

    1 问题列表 在Megatron LM Pytorch运行中报错如下 No module named fused layer norm cuda apex没有装或者装的不对 注意直接用pip install apex装的不是真正的nvdia
  • 常用JS验证

    常用JS验证 共通JS Ver Date Author Comment 1 00 2016 04 25 马 新規作成 function replaceAll strvalue strRepBy strRepWith while strval
  • 从 Java 到 Go:实现一个投票和民意调查系统

    在本篇博客中 我们将探讨如何使用 Go 语言实现一个投票和民意调查系统 并从 Java 开发者的角度分析 Go 语言的特点和优势 在阅读本文之前 我们假设您已经具备一定的 Java 编程基础 文章将通过具体的代码示例 帮助您更轻松地从 Ja
  • windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell 在这个shell上面你可以使用几乎所有linux unix上面的命令 他几乎可以取代windows的shell 用官方的题目说就是A Windows shell you
  • Linux中部署Spring Cloud项目

    Linux中部署Spring Cloud项目 文章为本人在学习的过程中 记录部署过程 仅供参考学习 因本人经验不足 教程或有不妥之处 还望指正 保姆级教程 敬请食用 简介 在学习过程中 部署时使用的项目是一个个人学习项目 若您喜欢 也可点击
  • Linux-压缩命令

    目录 1 tar 1 1 压缩 tar gz tar bz2 tgz 1 2 解压缩 tar gz tar bz2 tgz 2 zip 2 1 压缩 zip 2 2 解压缩 zip 3 rar 3 1 压缩 rar 3 2 解压缩 rar
  • 强大性能分析工具JVisualVM

    JVisualVM是由Sun提供的性能分析工具 如此强大的后盾怎能不强大 在Jdk6 0以后的版本中是自带的 配置好环境变量然后在运行中输入 JVisualVm 或直接到Jdk的安装目录的Bin目录下找到运行程序即可运行 如果是用Jdk1
  • 静态测试 动态测试 白盒测试的优缺点

    静态分析是一种不通过执行程序而进行测试的技术 静态分析的关键功能是检查软件的表示和描述是否一致 没有冲突或者没有歧义 动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前 之中和之后 对软件系统行为的分析 动态分析包含了程序在受控的
  • C语言 字母大小互相转换 三种思路

    1 利用ASCII值方法 大小写相差32 方法 1 include
  • maven在Win10的安装和配置

    1 下载和安装maven 一 下载Maven并解压 1 Maven官网下载地址 http maven apache org download cgi 2 下载后解压 将Maven的压缩包解压到 E Java apache maven 3 6
  • 【Unity2D入门教程】简单制作一个弹珠游戏之制作场景①(开场,结束,板子,球)

    学习目标 看过我前面的文章应该知道怎么制作开头和结尾 这里我简单把效果给大伙看一下 我用的游戏分辨率是4 3 因此我们要改变Canvas的的Cavans Scale为X1440 Y1080 结束的场景也一样 接着我们编写一个脚本来管理场景的
  • 基于人工势场算法机器人避障路径规划

    基于人工势场算法机器人避障路径规划 人工势场算法是一种热门的机器人路径规划算法 其通过建立虚拟的 势场 使得机器人在避障时能够像物理学中的粒子一样受到 势 的作用 最终实现自主导航 本文将介绍如何使用 MATLAB 实现基于人工势场算法的机
  • mac中的IDEA的使用快捷键

    1 command F 在当前文件进行文本查找 2 command shift F 进行工程和模块中的文件搜索 3 command u 找到这个方法的接口 4 command option commad 找到这个接口的实现类 5 comma
  • javascript中做减法时,出现小数位增加bug

    这个bug是js固有的 浮点数精度不准 你可以用下面方法来解决 思路是先放大 求和 差 积等运算后再缩小 如 加法函数 用来得到精确的加法结果 说明 javascript的加法结果会有误差 在两个浮点数相加的时候会比较明显 这个函数返回较为
  • JPEG编码原理及文件格式及代码分析

    一 JPEG编码原理 首先我们先来看一下JPEG的编码原理图 如上图所示 下面进行逐步的分析 1 RGB gt YUV 首先为了降低互相的关联性 将RGB转换为YUV 这样就可以对亮度信号和色度信号进行分别的处理 2 零电平偏置下移 由于后
  • CreateEvent函数在多线程中使用及实例

    HANDLE CreateEvent LPSECURITY ATTRIBUTES lpEventAttributes BOOL bManualReset BOOL bInitialState LPCSTR lpName bManualRes
  • 8.7.1 makefile实例——项目中的总makefile

    Linux C程序设计王者归来 第8章构建makefile文件 makefile相当于一种脚本编程语言 用户在编写makefile的过程中可以使用变量 控制结构语句和函数等一般编程语言的特性 同时也可以执行shell指令 makefile诞