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. 注释从“#”开始,到 ...
随机推荐
- R 语言 Windows 环境 安装与Windows下制作R的package--Rtools
1.1 预装的软件 (所有软件都可以在 http://www.biosino.org/R/R-doc/Rm/ 和 http://www.biosino.org/R/requiredSoftWar ...
- .net unicode汉字互相转换
[两种方法].net unicode汉字互相转换 ========================================= //汉字转Unicode编码(ASCII) private str ...
- 设计模式(五)Builder Pattern建造者模式
在我们日常生活中,如构建一个飞船,一个手机,一栋建筑,都会有非常复杂的组装,这时候应该用到建造者模式 以建造一个飞船为例 案例:造小页飞船 1.飞船各部分元件 package com.littlepa ...
- [osgearth][原]仿照谷歌,修改oe漫游器中focal(视角切换)功能
oe中的视角加速感觉好奇怪,就仿照谷歌方式去改了. 先看看oe原来的漫游器改变视角的接口: void CameraManipulator::setViewpoint(const Viewpoint&a ...
- 《剑指offer》第五十三题(0到n-1中缺失的数字)
// 面试题53(二):0到n-1中缺失的数字 // 题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字 // 都在范围0到n-1之内.在范围0到n-1的n个数字中有且只有一个数 ...
- Android SDK开发
目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得 集成 ArcFace FD 的集成过程非常简单 在 ArcFace F ...
- nRF52832-GPIOTE部分
GPIOTE部分学习思维导图 GPIOTE原理 1.1nRF52832寄存器类型 Task:任务寄存器,可以由程序或事件触发 Event:事件寄存器,事件可以产生中断和触发任务 Register:普通 ...
- dock容器操作命令
删除容器 docker rm -f ams 删除镜像 docker rmi -f ams:351 构建镜像 docker build -t ams:351 . 启动容器 docker run --p ...
- 关于Java实现的进制转化(位运算)
一.需求: 最近在做文件传输的东西,文件传输当然是传输很重要,包括编码格式以及进制的统一. 简略的说一下这次做的东西:首先文件是按照块来发送的,一块一块大的发,但是,发送的过程是这样的: 先发送头部, ...
- python基础和进阶思维导图(转)