Makefile文件代码详解

  • 一、Makefile文件
  • 二、每行代码注解

一、Makefile文件

CC = arm-linux-gccTARGET  = show_jpeg
CONFIG  = -Wall -O2
SRCS    = show_jpeg.c
IFLAGS  = -I./libjpeg/include
LFLAGS  = -L./libjpeg/lib
LFLAGS  += -ljpegOBJS = $(patsubst %.c, %.o, $(SRCS))$(TARGET):$(OBJS)$(CC) $^ -o $@ $(IFLAGS) $(LFLAGS) $(CONFIG)@echo "success:======$(CC) compilation OK===Done==="   %.o:%.c$(CC) -c $< -o $@ $(IFLAGS) $(LFLAGS) $(CONFIG).PHONY: clean
clean:$(RM) $(TARGET)$(RM) $(TARGET_AR)$(RM) $(OBJS)

二、每行代码注解

CC=arm-linux-gcc
系统默认为普通编译工具gcc,需移植裸机运行时,需修改为交叉编译工具arm-linux-gcc,故需要修改CC的变量;

TARGET = show_jpeg
此变量保存生成的目标文件名称;

CONFIG = Wall -O2
打开所有的警告,并设置优先等级为2,优先级越高,编译速度越慢,相对而言程序运行速度越快,调试难度越大。

SRCS = show_jpeg.c
保存含main函数的.c文件;

IFLAGS = -I./libjpeg/include
保存指定头文件的的路径(Makefile当前目录下的libjpeg文件夹的include文件夹下的头文件);

LFLAGS = -L./libjpeg/lib
保存指定库文件的路径(./libjpeg/lib);

LFLAGS += -ljpeg
添加库名;

OBJS = $(patsubst %.c, %.o, $(SRCS))
把所有的.c后缀文件替换为.o后缀文件,保存的是.o文件

*$ (TARGET): $(OBJS)
$(CC) $^ -o $@ $(IFLAGS) $(LFLAGS) $(CONFIG)
@echo “success:====== $ (CC) compilation OK====Done=”
***
链接库文件和依赖文件编译生成目标文件,并打印succeed信息到终端,等同于(arm-linux-gcc *.o -o show_jpeg -I./libjpeg/include -L./libjpeg/lib -ljpeg Wall -O2)

%.o:%.c
$(CC) -c $< -o $@ $(IFLAGS) $(LFLAGS) $(CONFIG)

把所有.c文件编程成.o文件(arm-linux-gcc *.c -o *.o -I./libjpeg/include -L./libjpeg/lib -ljpeg Wall -O2)

.PHONY: clean
clean:
$(RM) $(TARGET)
$(RM) $(TARGET_AR)
$(RM) $(OBJS)

.PHONY告诉Makefile不要对clean运用任何隐形规则,需要make clean 才能对删除目标文件和.o文件, $ (RM)相当于rm命令

Makefile代码解释相关推荐

  1. makefile文件解释

    makefile文件解释 makefile文件 详细解释 makefile文件 CC = g++PROGRAM = ubuntuopenglSRC = $(wildcard ./*.cpp)OBJEC ...

  2. ViSP中识别AprilTag的C++实例代码解释

    VISP中识别AprilTag的C++实例代码解释 接着上一篇: VISP中识别AprilTag的C++实例代码与运行结果 先展示代码,一句一句解释吧 #include <visp3/detec ...

  3. 最小操作系统的代码解释、NASM的初步使用

    一.最小操作系统的代码解释 很多资料上都有最小操作系统代码,即从裸机开始运行.引导机器.显示 hello world 并进入循环等待的代码:下面对代码进行一下大体的解释: org 07c00h; 告诉 ...

  4. ML之sklearn:sklearn的make_pipeline函数、RobustScaler函数、KFold函数、cross_val_score函数的代码解释、使用方法之详细攻略

    ML之sklearn:sklearn的make_pipeline函数.RobustScaler函数.KFold函数.cross_val_score函数的代码解释.使用方法之详细攻略 目录 sklear ...

  5. OpenCV用代码解释单应性的基本概念

    OpenCV用代码解释单应性的基本概念 用代码解释单应性的基本概念 基础理论 单应矩阵是什么? 单应变换如何有用? 示范代码 从共面点估计姿势 用代码解释单应性的基本概念 基础理论 单应矩阵是什么? ...

  6. 基于vue2.0实现音乐/视频播放进度条组件的思路及具体实现方法+代码解释

    基于vue2.0实现音乐/视频播放进度条组件的方法及代码解释 需求分析: ①:进度条随着歌曲的播放延长,歌曲播放完时长度等于黑色总进度条长度:时间实时更新. ②:当滑动按钮时,实时更新播放时间,橙色进 ...

  7. Makefile 中$@ $^ $ 解释

    Makefile 中$@  $^ $< 解释 给个例子你分析一下(来自国内开源项目g-bios) g-bios/app/net/Makefile ------------------------ ...

  8. 【Python笔记】列表基础操作 :创建,增加、删除、查询。附加:练习题。用简单代码解释。

    Python:列表基础操作 创建,增加.删除.查询.附加练习题.用简单代码解释. 目录 Python:列表基础操作 演示环境 第一部分:列表(list) 1. 创建空列表 2. 创建只有默认值的列表 ...

  9. Jena学习三——代码解释

    代码解释 可以直接官网学习http://jena.apache.org/tutorials/rdf_api.html#ch-Jena%20RDF%20Packages Tutorial01 packa ...

  10. 播放失败246106异常代码_美的燃气热水器修理分享(附代码解释)

    上门检修一台美的强排热水器. 试机检查:打开水流,强排风机虽转,未听到燃气电磁阀吸合和燃气火力声音,出水口也只有冷水流出,几秒后显示E2.查相应的代码解释E2:风压异常或风机故障.但观风机运行速度声音 ...

最新文章

  1. CUDA+OpenCV实现光线追踪(有无constant)
  2. 如何估算代码量_如何估算焊锡膏的印刷量?
  3. 【mybatis】IF判断的坑 (实现if test= status == 'zhangsan')
  4. ubuntu 16.04 安装MXNet GPU版本
  5. 如何查看文件夹里有几张图片_如何把几张图片合成一个pdf?图片合并为pdf的操作教程...
  6. python将数据集分成训练样本和类标签
  7. 电脑很卡~~~~为什么???
  8. shell命令locate
  9. python mongodb查询速度优化_Mongodb 3 查询优化(语句优化、建索引)
  10. 【POJ1958】【典型递推问题】汉诺塔问题
  11. 【Java】Servlet完全自学手册
  12. awflasher的Vplayer 2.1 ( FLV Player )
  13. 计算机网络状态机,计算机网络之七:TCP协议(1)
  14. CSS图片底部留白的解决办法
  15. Java显示棋盘_Java的GUI学习:显示国际棋盘
  16. EXCEL组合功能函数和VBA汇总
  17. python nodejs开发web_用nodejs和python实现一个爬虫来爬网站(智联招聘)的信息
  18. 中国近代史-蒋廷黻-笔记-第一章-剿夷与抚夷-第四节-民族丧失二十年的光阴
  19. YDOOK: STM32: 波特率的定义 波特率计算 波特率是什么?
  20. 谷歌不支持调用摄像头麦克风_谷歌大手一挥,第三方相机或已无立锥之地

热门文章

  1. 路由器和计算机的功能有何不同,网关和路由器的区别是什么 两者又有什么不同...
  2. 计算机显卡更新,电脑显卡怎么升级,电脑显卡升级方法图解
  3. Cassandra在海量数据存储及大型项目案例介绍-part1
  4. 编程将数字“翻译”成英文。例35706“翻译”成three-five-seven-zero-six。
  5. C++ IO流学习笔记
  6. cogs 259. 亲戚
  7. Learn Git Branching 答案
  8. 2022-2028全球沉浸式投影行业调研及趋势分析报告
  9. 屏幕距离和坐便转换工具_视频分辨率转换器(mp4视频分辨率转换器)V2.0.1 官方版...
  10. 面向功利编程,面向Star开源? 一个开发者的2019反思总结