一、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文件写法解析的更多相关文章

  1. github中README.md文件写法解析,git指令速查表

    http://blog.csdn.net/u012234115/article/details/41778701 http://blog.csdn.net/u012234115/article/det ...

  2. 利用 autoconf 和 automake 生成 Makefile 文件

    一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...

  3. linux中Makefile文件相关内容

    第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...

  4. C++学习笔记25:makefile文件2

    Makefile文件语法 行解析:命令按行解析 命令行的行首字符为Tab键,其他行的行首字符不得为Tab键,但可以使用多个空格缩进 换行:命令太长时,行尾使用"\"换行 注释:行首 ...

  5. Linux内核Makefile文件(翻译自内核手册)

    --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...

  6. apt系统中sources.list文件的解析

    /etc/apt/sources.list 一般源信息都存在这个文件中.但众多软件源都放在一个文件中实在有点乱,于是新版ubuntu也有了分类的方法: 文件夹  /etc/apt/sources.li ...

  7. C语言Makefile文件使用

    C语言中代码Makefile文件的写法 单文件,例: #定义变量 CFLAGS=gcc #具体命令都需要一个入口,all: 这个就相当于入口,默认情况,执行第一次入口, #后面执行其他入口进行依赖,如 ...

  8. 实例学习写Makefile文件

    目录 0. 扫盲 1. 编译,链接 2. Makefile文件执行 3. Makefile书写规则 4. 案例 5. Makefile是如何工作的 6. 拔高,参考 0. 扫盲 Linux 环境下的程 ...

  9. (转载)QT中PRO文件写法的详细介绍,很有用,很重要!

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下: 1. 注释从“#”开始,到 ...

随机推荐

  1. Web Api:基于RESTful标准

    参考链接:http://www.cnblogs.com/lori/p/3555737.html 简单的了解到RESTful架构后,跟着以上链接做了一个小练习. Step1: 新建WebApi项目,新建 ...

  2. python 获取进程数据

    from multiprocessing import Process, Manager def func(dt, lt): ): key = 'arg' + str(i) dt[key] = i * ...

  3. eclipse中配置maven和创建第一个 Spring Boot Application

    关于Maven的下载.环境变量的配置自行百度,今天记录一下在Eclipse中配置Maven的操作: mvn -v 出现上图说明maven和jdk的要求都达到了(jdk要8.0及以上的版本) 然后在ec ...

  4. 通过TortoiseSVN进行文件(夹)外链 External File

    1.假设将server/a.lua文件外链到client文件夹中 2.在client文件夹空白处右键->TortoiseSVN->Properties->New->Extern ...

  5. Golang简单日志类

    实现简单的日志写入文件功能运行环境:golang1.4.2+win7x64golang1.4.2+centos6.5×64 package Helper import ( “fmt” “log” “o ...

  6. vue-循环标记列表元素

    <el-col :lg="4" class="list" v-for="(item,index) in picList"> &l ...

  7. MySQL utf8 和 utf8mb4 的区别

    utf-8 时变化长度的编码,储存一个code point 需要1~4个字节. 然而,mysql的utf8只存储最多3个字节per code point. 所以,utf8字符集不能存储所有的unico ...

  8. 荧光激活细胞分选( FACS)

    全称:fluorescence-activated cell sorting 参考: 利用荧光激活细胞分选技术获取荧光蛋白标记肾小球足细胞 荧光激活细胞分离技术在角膜缘干细胞研究中的应用 [求助]急! ...

  9. LeetCode--268--缺失数字

    问题描述: 给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9 ...

  10. 2.2 UML用例模型

    参与者(Actor) 参与者(注:有另一种翻译“执行者”) 代表位于系统之外并和系统进行交互的一类事物(人.物.其他软件子系统等) 通过它,可以对软件系统与外界发生的交互进行分析和描述 通过它,可以了 ...