一、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. Spring-MVC依赖

    <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api& ...

  2. jsTree使用

    引用:jsTreede css 与Js 初始化jsTree: //加载树 function initTree(treeData) { $.jstree.destroy(); $('#treeDiv') ...

  3. _equipment

    该表控制切换地图自动更换装备,离开该地图时,装备自动切换为原来.,HEAD - TABARD小于0时取下装备,等于0时不更换,大于0时更换为对应装备. comment 备注 class 职业索引 1- ...

  4. centos nginx 中安装ssl证书 以及在项目中的使用

    今天阿里云的证书到期了,重新申请了一个,下面是从申请到安装以及结合项目使用的过程: 1.登录阿里云   2.在左侧找到SSL证书 3.申请免费的证书 4.下载证书 5.根据说明配置nginx 6.在项 ...

  5. spring集成shiro报错解决(no bean named 'shiroFilter' is defined)

    引言: 本人在使用spring集成shiro是总是报“no bean named 'shiroFilter' is defined”,网上的所有方式挨个试了一遍,又检查了一遍, 还是没有解决,最后,抱 ...

  6. dll多个版本问题

    在配置文件设置不同版本的dll即可 配置文件如下 configuration 节点下面的  runtime 节点新增各个版本配置内容 <runtime> <assemblyBindi ...

  7. 自动化测试基础-断言(Assert)使用方法

    junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类.1.assertTrue/False([String message,]boolean condi ...

  8. nginx 启动报错 1113: No mapping for the Unicode character exists in the target multi-byte code

    failed (1113: No mapping for the Unicode character exists in the target multi-byte code page) 因为路径有中 ...

  9. Nordic SDK例程目录结构

    Nordic SDK例程目录结构为:SDK版本/ examples /协议角色/例子名称/开发板型号/协议栈型号/工具链类型/具体工程 Nordic每一个例子都支持5种工具链:Keil5/Keil4/ ...

  10. lambda表达式与方法重载问题

    笔者之前在学习Java8新特性的时候,最吸引我的就是lambda表达式,它无疑为Java函数编程提供了强有力的支持.lambda表达式的使用方法很简单,下面给出最简单的用法. // Interface ...