继续学习makefile,希望尽快掌握makefile好在面试中更好的掌握方向!加qq1126137994一起学习更多技术!!

1、回顾

makefile的意义:

  • makefile用于定义源文件之间的依赖关系
  • makefile说明如何编译各个源文件并生成可执行文件

依赖的定义:

‘\t’ 代表的是tab键!

makefile中各元素的意义:
-targets:

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

-prerequisities:

  • 当前目标所依赖的其他目标或依赖

-command:

  • 完成目标所需执行的命令

注意事项:

  1. targets可以是多个目标,使用空格对目标名进行分离
  2. prerequisities可以是多个依赖,使用空格对多个依赖进行分隔
  3. 每一个命令行,都必须以一个【tab键】字符开始,【tab】字符告诉make这一行是命令行
  4. 续行符【\】,可以将内容分开写到下一行,提高可读性

一个makefile的依赖示例:

依赖规则:

  1. 当目标对应的文件不存在,执行对应的命令
  2. 当依赖在时间上比目标更新,执行相应的命令(意思就是依赖文件有改动时,执行相应命令)
  3. 当依赖关系连续发生时,对比依赖链上的每一个目标

小技巧:
makefile中可以在命令前加上【@】符,作用为命令无回显!

2、makefile简单示例

下面是一个简单的makefile文件:


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

输入:make命令,显示如下:
make test
make all

3、make编译简单示例

小技巧:
工程开发中,可以将最终可执行的目标文件名 和 all 同时作为makefile中的第一条规则的目标

hello.out all : main.o func.ogcc -o hello.out main.o func.o

下面给出一个:
makefile文件:

hello.out all : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.c

func.c文件:

#include "stdio.h"void foo()
{printf("void foo() : hello makefile\n");
}

main.c文件:


extern void foo();int main()
{foo();return 0;
}

在Linux下输入make命令执行,结果如下:
gcc -o main.o -c main.c
gcc -o hello.out func.o main.o

运行编译所得的可执行文件:hello.out
输出结果为:
void foo() : hello makefile

以上程序比较简单,就不分析了,仅供学习复习使用!!!

4、总结

  1. makefile用于定义源文件之间的依赖关系
  2. makefile说明如何编译各个源文件并生成可执行文件
  3. makefile中的目标之间存在连续依赖的关系
  4. 依赖存在并且命令执行成功是目标完成的充要条件

想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。

本学习记录完全来源于狄泰软件学院的相关课程,可以加我q:1126137994或者Q群:199546072 ,给你推荐更多学习课程。

【Makefile由浅入深完全学习记录2】初识 makefile 的结构相关推荐

  1. 【Makefile由浅入深完全学习记录6】Makefile中变量的高级主题上

    抓住基础,学习更多技术,迎接挑战,加qq:1126137994 微信:liu1126137994 一起学习更多技术~ 上一篇文章学习了makefile中的预定义变量的使用,今天来继续学习makefil ...

  2. 【Makefile由浅入深完全学习记录7】Makefile中变量的高级主题下

    加qq:1126137994 微信:liu1126137994 一起学习更多技术~ 继续上一篇文章关于变量的学习! 1.环境变量(全局变量) -makefile中能够直接使用环境变量的值 如果make ...

  3. 【Makefile由浅入深完全学习记录1】认识make和makefile

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 今天开始学习项目又多了一项:Makefile由浅入深完全学习.之前做 ...

  4. 【Makefile由浅入深完全学习记录3】伪目标的引入

    只有不停的努力,才能看起来很轻松!!!加qq1126137994共同学习探讨更多技术!!! 1.思考: makefile中的目标究竟是什么? 在默认的情况下: make认为目标对应一个文件 make比 ...

  5. 【Makefile由浅入深完全学习记录8】条件判断语句

    加qq:1126137994 微信:liu1126137994 一起学习更多技术~ 今天来学习Makefile中条件判断语句! Makefile也算是一门语言,它有自己的语法,那么它应该也会像C/C+ ...

  6. 【Makefile由浅入深完全学习记录5】预定义变量的使用

    今天学习Makefile预定义变量的使用,加qq:1126137994.微信:liu1126137994一起学习更多技术!!! 1.预定义变量:自动变量 在Makefile中存在一些预定义过的变量,我 ...

  7. 【Makefile由浅入深完全学习记录4】变量和不同的赋值方式

    今天来学习Makefile中变量的不同的赋值方式!努力的意义就是让贫穷不再限制你的想象!加qq共同学习交流1126137994 1.概念 makefile中支持程序设计中变量的概念 makefile中 ...

  8. Threejs 学习记录:初识 threejs

    Threejs 学习记录:第一个三维立体场景 第一个三维立体场景 创建场景三要素:场景.相机.渲染器 添加场景主体:旋转立方体 渲染场景 动画立方体 第一个三维立体场景 跟随官方示例创建一个带有旋转立 ...

  9. 学习记录1Python初识

    一. 1.print() 函数 打印输出的意思,将括号内的内容打印出来.具体如下: 注:标点符号要使用英文符号,用中文符号会报错 print("向命运,未知的前方,而你与我共航") ...

最新文章

  1. 文本文件 java,java 写文本文件
  2. RESTful_URI资源
  3. 皮一皮:爸爸的地位...
  4. 微信开发 提示 Redirect_uri参数错误解决方法
  5. 终于有人讲透了芯片是什么(电子行业人士必读)
  6. 六、springcloud之配置中心Config
  7. 不要再纠结卷积的公式啦!0公式深度解析全连接前馈网络与卷积神经网络!
  8. php markdown 文章目录,markdown 文本内跳转,生成目录
  9. 我是如何成为算法工程师的,超详细的学习路线
  10. .net 中使用rabbitmq
  11. CHM电子书木马制作攻略
  12. 金万维异速联产品简介
  13. GB/T14710|聊一聊医用电气设备的环境试验
  14. Smart3D系列教程3之 《论照片三维重建中Smart3D几个工作模块的功能意义》
  15. 迷失在Blog(ZZ)
  16. 传詹克团、吴忌寒将卸任比特大陆CEO一职
  17. 找出列表中最大或最小的元素-python3
  18. 小酷智慧地图3D导览v1.0.82 打卡定位 地图打卡
  19. js验证开始日期不能大于结束日期_js如何判断开始时间不能大于结束时间
  20. 基于MindSpore的MASS网络实现

热门文章

  1. 34tomcat设置默认页面
  2. 图解cacti简单使用
  3. php redis 删除元素,redisTemplate.delete()不能删除元素
  4. element弹框的的this.$alert、this.$prompt方法用法
  5. Qt学习笔记(持续更新)
  6. 腾讯云对象存储 python_python 云存储
  7. 数据结构之单向环形列表解决josef问题
  8. Python 创建和使用类
  9. day02-java关键字
  10. Delphi iOS 开启文件共享 UIFileSharingEnabled