系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、什么是Makefile?
  • 二、Makefile 的规则
  • 三、记住这个例子
    • 1.整个 make 的工作流程
    • 2.Makefile 中特殊变量
  • 四、天火三玄变
    • 1.第一变
    • 2.第二变
    • 3.第三变
      • 3.1 修炼必备函数
      • 3.2 修炼入魔
  • 总结

前言

如果写的对你有点帮助的话,别忘了给我介绍,当然如果是小姐姐,可以自荐哦哈哈!


一、什么是Makefile?

怎么说也要走走流程,介绍一下吧! 一个工程里面会有很多文件夹,文件夹里会有很多 .c文件 .h文件,当我们编译时,不可能把所有源文件都写一遍,太费事了,所以Makefile可以实现自动化编译。当我们写出一个比较好的Makefile时,我们就可以make一下,编译整个工程。就相当于阿基米德撬动地球的支点。

本质:文件依赖性

二、Makefile 的规则

target :可以是一个 object file(目标文件),也可以是一个执行文件,还可以是一个标签( label)。
prerequisites: 生成该 target 所依赖的文件和/或 target
command: 该 target要执行的命令(任意的 shell 命令)

核心规则

如果prerequisites做了任意变化,target就要更新,就要执行一次command.
牢记
command 前面是个Tab,一定要有Tab.

本质文件依赖性

目标:依赖文件(我必须得到你才能变成自己想要的样子)
举例: main:led.c 要想变成main必须需要led.c

三、记住这个例子

main: main.o beep.o led.o usart.o    gcc main.o beep.o led.o usart.o -o main
led.o:led.cgcc -c led.c -o led.o
usart.o:usart.cgcc -c usart.c -o usart.o
beep.o:beep.cgcc -c beep.c -o beep.o
main.o:main.cgcc -c main.c -o main.o
clean: rm main.o beep.o led.o usart.o -rf

1.整个 make 的工作流程

以上例介绍

  1. 输入命令:make
  2. make会自动编译Makefile
  3. 会把main当作最终生成的文件
  4. 但是依赖 .o文件(main.o beep.o led.o usart.o)
  5. 然而 .o文件依赖 .c 文件
  6. make clean :清除所有的目标文件,以便重编译

强调:如果增加或减少或改变 .c .h文件,.o文件会被重新编译,当然也就会生成了个新的main.

2.Makefile 中特殊变量

%.c:相当于led.c beep.c usart.c 等等
%.o: 相当于led.o beep.o usart.o 等等
*.o: 相当于led.o beep.o usart.o 等等
$@ 目标文件
$^ 所有的依赖文件
$< 第一个依赖的文件

四、天火三玄变

1.第一变

main:main.o beep.o led.o usart.o    gcc $^ -o $@
led.o:led.cgcc -c $< -o $@
usart.o:usart.cgcc -c $< -o $@
beep.o:beep.cgcc -c $< -o $@
main.o:main.cgcc -c $< -o $@
clean: rm *.o -rf

$^ : 相当于main.o beep.o led.o usart.o
$@: 相当于main

看起来简单了一些,但是还可以再变。

2.第二变

main: *.o   gcc $^ -o $@
%.o:%.cgcc -c $< -o $@
clean: rm *.o -rf

这样还能看懂吗?需要认真看3.2里的内容哦!实在不懂请私信吧!但是真的很简单了。

3.第三变

危险提示:实力不济不要强行修炼。

3.1 修炼必备函数

1.函数调用用$符号
2. 函数的参数之间以 , 隔开。函数名字和参数之间用空格隔开
3.

4.
5 .
6 .
7 .
8 .

3.2 修炼入魔

如果继续添加.c文件呢?可不可以写成不管再添加多少.c文件,依然可以适用的Makefile呢?

OBJ := main
CFILE := $(wildcard ./*.c)
OFILE := $(patsubst %.c,%.o,$(CFILE))
$(OBJ) : $(OFILE)          gcc $^ -o $@
%.o : %.c                 gcc -c $< -o $@
clean:rm *.o -rf

解释一番吧!
第一行: 最终文件依然是main
第二行: 当前路径下所有.c文件给CFILE
第三行: 将CFILE里所有.c文件转换成.o文件给OFILE
第四行:main需要依赖所有.o文件
第六行: 所有.o文件需要依赖.c文件


总结

学废没有?

我教你写Makefile,你给我介绍Girlfriends.相关推荐

  1. 教你写Makefile

    转载文 Makefile 值得一提的是,在Makefile中的命令,必须要以[Tab]键开始. 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都 ...

  2. 跟我一起写makefile: 概述、介绍、规则

    跟我一起写makefile 概述.介绍.规则 转自:https://seisman.github.io/how-to-write-makefile/rules.html 概述 什么是makefile? ...

  3. 【转载】跟我一起写 Makefile(一)

    本文转载自:https://blog.csdn.net/haoel/article/details/2886 工欲善其事,必先利其器. 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 活动 ...

  4. 很不错的教程一步步教你如何写Makefile

    [转载:原文地址:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=408225] 陈皓 概述 -- 什么是makefile?或许很多 ...

  5. 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫

    系列教程 手把手教你写电商爬虫-第一课 找个软柿子捏捏 如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相 ...

  6. 猫哥教你写爬虫 046--协程-实践-吃什么不会胖

    吃什么不会胖? 低热量食物 食物的数量有千千万,如果我们要爬取食物热量的话,这个数据量必然很大. 使用多协程来爬取大量的数据是非常合理且明智的选择 如果我们要爬取的话,那就得选定一个有存储食物热量信息 ...

  7. 猫哥教你写爬虫 006--条件判断和条件嵌套

    流程控制 复仇者联盟3-无限战争(搜集宝石) python里面, 不需要使用;来结尾, 因为python是使用换行来结束一行代码的 if判断, 没有{}, python使用缩进来表示层级关系 if.. ...

  8. 手把手教你写一个生成对抗网络

    成对抗网络代码全解析, 详细代码解析(TensorFlow, numpy, matplotlib, scipy) 那么,什么是 GANs? 用 Ian Goodfellow 自己的话来说: " ...

  9. php注册程序,[PHP初级]手把手教你写注册程序 1

    [PHP初级]手把手教你写注册程序 1 实例内容 在此教程,我们将通过写一个用户注册程序,学习以下内容: 数据的传输与获取 信息的验证 pdo方式操作数据库 事务处理 前台显示文件:index.php ...

  10. 跟我一起写 Makefile(整理版)

                      跟我一起写 Makefile                     作者:陈皓           (博客地址:http://blog.csdn.net/haoe ...

最新文章

  1. C# 特性(Attribute)学习。
  2. 算法导论——lec 10 图的基本算法及应用
  3. java储存学生档案应该注意事项_档案管理的注意事项有哪些
  4. 大数据学习(4)--分布式数据库HBase
  5. poj 2484 A Funny Game
  6. Android和iOS智能机去年出货超7亿 同比增长46%
  7. Leetcode每日一题:42.trapping-rain-water(接雨水)
  8. 算法导论 练习12.3
  9. 【STM32】电容触摸按键
  10. 【番外篇】波动率的几种模型
  11. 【批处理】快速批量修改特定文件夹的文件名
  12. Error: The method ‘DioHttpHeaders.add‘ has fewer named arguments than those of overridden method
  13. PHP超全基础知识点
  14. 完整登录、注册页面(无功能)
  15. office 2013 已停止工作;word excel 打开任何文件
  16. 她这套染色体,曾走过半个地球,记录了漫长的交配史...
  17. 基于单片机的多功能电子医药盒设计
  18. 一天的班上玩一直是想去干什么呢
  19. C++ fstream 创建文件
  20. 2016校招薪资汇总

热门文章

  1. Z变换零极点与收敛域的关系
  2. 烟雨黑帽seo超级模板站群-可一键清除内页URL转换成单页-百度搜狗超级模板站群-多城市网站站群
  3. tc2 怎么编写c语言6,WinTC.EXE:TC for Windows (TC2 C语言编译器)
  4. volatile 与诡异事件
  5. 编译安装Vue-devtools
  6. android开发日历,Android日历开发详解
  7. 看华为生态大学 如何玩转人才生态?
  8. 基因重组-冲刺日志(第一天)
  9. Linux下查看电脑配置信息
  10. 使用lxml爬取豆瓣电影排行榜