第2课 - 初识makefile的结构

1. makefile 的意义

  (1)makefile 用于定义源文件之间的依赖关系 (在阅读开源软件源码时,可通过Makefile掌握源码中各个文件之间的关系)

  (2)makefile 说明如何编译各个源文件并生成可执行程序  

2. makefile 的规则

  (1)makefile 规则的定义

      形式1:targets : prerequisites command

      形式2:targets : prerequisites 

          '\t'     command      

  (2)makefile 规则中各元素的含义

    targets 目标

      • 通常是需要生成的目标文件名  
      • make 所需执行的命令名称

    prerequisities 依赖        

      • 当前目标所依赖的其它目标或文件

     command 命令

      • 完成目标所需要执行的命令(系统自带命令 — PATH 环境变量、用户命令 — 自己指定路径)

  (3)规则中的注意事项

    targets 可以包含多个目标

      • 使用空格对多个目标进行分隔  

    prerequisities 可以包含多个依赖          

      • 使用空格对多个依赖进行分隔

     [Tab] 键: '\t'

      • 每一个命令行必须以 [Tab] 字符开始
      • [Tab] 字符告诉 make 此行是一个命令行

    续行符: \ 

      • 可以将内容分开写到下一行,提高程序的可读性

    makefile可以在命令前添加 @ 符号,使该命令静默执行

  (4)一个 makefile 的规则示例 

 all : test
echo "make all" test :
echo "make test"

3. makefile依赖(prerequisites)的规则

  (1)当目标对应的文件不存在时,执行对应的命令

  (2)当依赖在时间上比项目更新时,执行对应命令

  (3)当依赖关系连续发生时,对比依赖链上的每一个目标

4. makefile编程实验

 //mian.c源码

 int main(void)
{
func();
return ;
}
 //func.c源码

 #include <stdio.h>

 void func()
{
printf("hello make!\n");
}
 #makefile源码

 hello.out all : main.o func.o
gcc -o hello.out main.o func.o main.o : main.c
gcc -o main.o -c main.c func.o : func.c
gcc -o func.o -c func.c

 

  (1)工程开发中可以将 最终可执行文件名 all 同时作为makefile中第一条规则的目标。但最终可执行文件名要放在all之前,make默认使用多个目标中的首个目标。这样做的好处是当默认执行make时,make会自行判断依赖关系有没有发生更新,如果没有就不会重新编译程序。如果这里用all作为目标,由于不存在all这个文件,每次执行make时,第一条规则的命令 总会被执行,这与实际不符。如果需要强制编译该程序,执行 make all 即可。

  (2)makefile不仅可以用在C/C++中,同样可以用在其它编程语言中,如Java等。makefile只是解决问题的一种方法,但普遍应用于C/C++中。

    

注:本文整理于《狄泰12月提升计划》课程内容

狄泰QQ群:199546072

第2课 - 初识makefile的结构的更多相关文章

  1. Python面向对象01 /面向对象初识、面向对象结构、类、self、实例化对象

    Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象初识 2. 面向 ...

  2. python 面向对象专题(一):面向对象初识、面向对象结构、类、self、实例化对象

    https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象 ...

  3. Linux0.11之初识Makefile/build.c

    前言 Makefile对于从来没有接触过的人来说是相当别扭的(比如我),但它确实又是非常重要的,它描述了一个Image是如何形成的,理解它也许并不能帮我解决实际问题,而且编写Makefile的工作也许 ...

  4. 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

    预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...

  5. html 初识 文档结构 常用标签

    HTML初识 △HTML: 超文本标记语言,是一种用于创建网页的标记语言,不是编程语言,没有逻辑 本质上是浏览器可识别的规则 我们按照规则写网页,浏览器根据规则渲染我们的网页.对于不同的浏览器,对同一 ...

  6. 初识makefile

    Makefile的规则 目标 : 需要的条件 (注意冒号两边有空格) 命令 (注意前面用tab键开头) 解释一下: 1 目标可以是一个或多个,可以是Object File,也可以是执行文件,甚至可以是 ...

  7. 初识B/S结构编程技术

    B/S结构编程语言 ASP(Active Server Page 动态服务器页面)技术 微软早期推出的B/S编程技术,出现在JSP和ASP.NET之前,PHP当时也很不稳定.ASP之前,动态网站使用G ...

  8. tensorFlow入门实践(三)初识AlexNet实现结构

    参考黄文坚<TensorFlow实战>一书,完成AlexNet的整体实现并展望其训练和预测过程. import tensorflow as tf batch_size = 32 num_b ...

  9. makefile笔记1 - 初识makefile

    前情提要 上一篇<编译入门>讲了变成的基本问题.如果源文件只有一个,就如之前的例子,那么用gcc命令直接编译就可以了.但是很多实际的工程用到的源文件都是相当多的,这时候用命令一个个编译是很 ...

随机推荐

  1. Mybatis中选择语句的使用:<choose>标签、分区排序 Row_num() over ()函数的使用呢

    1.Mybatis中数据库语句的选择 使用: <choose>       <when test="relationType=='L'">          ...

  2. 手把手教你在win10下搭建pytorch GPU环境(Anaconda+Pycharm)

    Anaconda指的是一个开源的Python发行版本,其主要优点如下: Anaconda默认安装了常见的科学计算包,用它搭建起Python环境后不用再费时费力安装这些包: Anaconda可以创建互相 ...

  3. andriod开发中遇到的错误

    1.java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security pol ...

  4. Jmeter 常用函数(29)- 详解 __eval

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 和 __V 的作用基本一致,执行变量名 ...

  5. TCL(事务控制语言)

    #TCL/*Transaction Control Language 事务控制语言 事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行. 案例:转账 张三丰 1000 ...

  6. CentOS下删除物理磁盘,删除LVM

    1.删除 dmsetup remove LV_name 2.vgreduce VG_name --removemissing 3.vgremove VG_name 4.pvremove disk

  7. python 多个装饰器的调用顺序分析

    一般情况下,在函数中可以使用一个装饰器,但是有时也会有两个或两个以上的装饰器.多个装饰器装饰的顺序是从里到外(就近原则),而调用的顺序是从外到里(就远原则) 样例: def func1(func): ...

  8. Windows中使用PowerShell查看和卸载补丁

    查看:get-hotfix -id KB4470788 卸载:wusa /uninstall /kb:3045999 get-hotfix -id KB4470788 wusa /uninstall ...

  9. 产品经理培训教程视频大全与模板Axure rp9与8视频教程元件库模板

    注意:请仔细阅读购买,一旦发货百度网盘链接不能退~ 自动发邮件到买家留言处的邮箱,或注册淘宝时的邮箱自动通过旺旺给您发货还可以访问网页提取链接自助提取(复制到浏览器): http://4k5.cn/V ...

  10. 传统servelt项目之分页操作

    需求说明: • 演示最终分页效果 • 提供分页素材     • 分页的作用 • 数据量大,一页容不下 • 后台查询部分数据而不是全部数据 • 降低带宽使用,提高访问速度     • 分页的实现思路 • ...