makefile文件写法解析
一、makefile文件示例
makefile文件并不难写,一个makefile模版如下所示,所有makefile文件在此基上稍微修改就可以了。
# this is a makefile #这一行是注释
NAME = MemInfo.exe #下来这几行是宏定义,相当于linux的变量
OBJS = $(NAME).obj
RES = $(NAME).res LINK_FLAG = /subsystem:windows
ML_FLAG = /c /coff $(NAME): $(OBJS) $(RES) #这一行指出最终生成的exe文件依赖哪些obj和res文件
Link $(LINK_FLAG) $(OBJS) $(RES) #这一行是生成exe时执行的链接命令; .asm.obj: #这一行表示.asm文件转成.obj文件要使用下边这个语句
ml $(ML_FLAG) $< #这一行是使用.asm转.obj的编译命令;$<表示对当前目录下所有.asm文件进行编译且编译生成的.obj文件使用和原来.asm文件一样的名字
.rc.res: #这一行表示.rc文件转成.res文件要使用下边这个语句
rc $< #这一行是使用.rc转.res的编译命令;$<表示对当前目录下所有.rc文件进行编译且编译生成的.res文件使用和原来.rc文件一样的名字 clean: #这一行表示最后要执行以下的清除命令
del *.obj #删除当前目录下的所有.obj文件
del *.res #删除当前目录下的所有.res文件
二、makefile文件解读
2.1 makefile文件的组成
我们手动编译的过程是:通过rc编译资源文件,通过ml编译源文件,通过link连接程序。
makefile其实就是用于指导make程序完成这几件事,makefile就是由obj/res转exe的链接规则、asm转obj的编译规则、rc转res的编译规则和清除中间文件的规则等四种规则组成;不过为了方便还引入了注释和宏定义,这并不难理解。
2.2 显式规则和隐含规则
makefile文件规则分为显式规则和隐含规则两种。
显示规则指的是明确指出了生成的文件叫什么、由哪几个文件生成的规则。比如上边obj/res转exe的链接规则是显式规则:其明确指出生成文件叫MemInfo.exe,且是由MemInfo.obj和MemInfo.res两个文件生成。
隐含规则指的是不具体指出具体文件名只指出文件扩展名的规则。比如asm转obj的编译规则中只是通过.asm.obj指出将asm文件转成obj文件,并没有具体指出哪个asm文件转成obj文件。同理rc转res的编译规则和清除中间文件的规则也都是隐式规则。
但是要注意不是说可以简单地归类为:obj/res转exe的链接规则是显式文件,而asm转obj的编译规则等其他三种规则是隐式文件。当exe由obj和res两种文件组成时其必然得是显式规则,但如果只由obj文件组成那就可以写成隐式规则;而asm转obj的编译等其他三种规则只要不嫌麻烦也完全可以写成一条条的显式规则。
或者叫,显式规则适用于从某几个文件到某个文件,隐式规则适用于从一类文件到另一类文件。
makefile文件写法解析的更多相关文章
- github中README.md文件写法解析,git指令速查表
http://blog.csdn.net/u012234115/article/details/41778701 http://blog.csdn.net/u012234115/article/det ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
- linux中Makefile文件相关内容
第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...
- C++学习笔记25:makefile文件2
Makefile文件语法 行解析:命令按行解析 命令行的行首字符为Tab键,其他行的行首字符不得为Tab键,但可以使用多个空格缩进 换行:命令太长时,行尾使用"\"换行 注释:行首 ...
- Linux内核Makefile文件(翻译自内核手册)
--译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...
- apt系统中sources.list文件的解析
/etc/apt/sources.list 一般源信息都存在这个文件中.但众多软件源都放在一个文件中实在有点乱,于是新版ubuntu也有了分类的方法: 文件夹 /etc/apt/sources.li ...
- C语言Makefile文件使用
C语言中代码Makefile文件的写法 单文件,例: #定义变量 CFLAGS=gcc #具体命令都需要一个入口,all: 这个就相当于入口,默认情况,执行第一次入口, #后面执行其他入口进行依赖,如 ...
- 实例学习写Makefile文件
目录 0. 扫盲 1. 编译,链接 2. Makefile文件执行 3. Makefile书写规则 4. 案例 5. Makefile是如何工作的 6. 拔高,参考 0. 扫盲 Linux 环境下的程 ...
- (转载)QT中PRO文件写法的详细介绍,很有用,很重要!
版权声明:本文为博主原创文章,未经博主允许不得转载. 在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下: 1. 注释从“#”开始,到 ...
随机推荐
- hdu 6199 gems gems gems dp
gems gems gems Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) P ...
- Xshell5中常用linux服务器命令集合
简易版:http://www.zhimengzhe.com/linux/84546.html 详细版:http://www.cnblogs.com/peida/tag/%E6%AF%8F%E6%97% ...
- React + Ant Design网页,配置
第一个React + Ant Design网页(一.配置+编写主页) 引用博主的另外一篇VUE2.0+ElementUI教程, 请移步: https://blog.csdn.net/u0129070 ...
- STL——map
看到map这里,都不知道它主要是干嘛的,你有没有这样的疑问. map的主要作用:提供对T类型的数据进行快速和高效的检索 .C++ STL中标准关联容器set, multiset, map, multi ...
- JAVA基础知识总结:十一
一.内部类 一个类中包含着另外一个类,里面的类被称为内部类,外面的称为外部类 1.成员内部类 和成员变量或者成员方法平级的内部类 语法: 访问权限修饰符 class 外部类类名{ //成员变量 //成 ...
- Unity Shader入门精要之 screen post-processing effect
本篇记录了学习Unity Shader入门精要的屏幕后处理的一些知识点. OnRenderImage(RenderTexture src, RenderTexture dest) 以上函数是Unity ...
- 第 8 章 容器网络 - 059 - 安装配置 flannel
安装配置 flannel 1) build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build. 不过用于做 build ...
- 拒绝采样 Rejection Sampling
2018-12-09 16:40:30 一.使用Rand7()来生成Rand10() 问题描述: 问题求解: 这个问题字节跳动算法岗面试有问到类似的,有rand6,求rand8,我想了好久,最后给了一 ...
- 最短路径遍历所有的节点 Shortest Path Visiting All Nodes
2018-10-06 22:04:38 问题描述: 问题求解: 本题要求是求遍历所有节点的最短路径,由于本题中是没有要求一个节点只能访问一次的,也就是说可以访问一个节点多次,但是如果表征两次节点状态呢 ...
- Spring Boot入门第一天:Hello, Spring Boot!
原文链接 1. 新建一个Maven Web项目. 2. 配置pom.xml文件. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...