GNU Make 使用手册(中译版)
GNU Make 使用手册(中译版)
GNU Make 使用手册(中译版)
翻译:于凤昌
译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构、理解Linux的编程总体设计及思想必须首先全部读通Linux源代码中各级的Makefile文件。目前,在网上虽然有一些著作,但都不能全面的解释Linux源代码中各级的Makefile文件,因此本人认真阅读了GNU Make 使用手册(3.79)版原文,在此基础上翻译了该手册,以满足对Linux源代码有兴趣或者希望采用GCC编写程序但对缺乏GNU Make全面了解之人士的需要。本人是业余爱好不是专业翻译人士,如果有问题请通过电子信箱与我联系共同商讨,本人的E-mail为:yfc70@ 。注意在文章中出现的斜体加粗字表示章节。
GNU make Version 3.79
April 2000
Richard M. Stallman and Roland McGrath
目录
1 make概述
1.1 怎样阅读本手册
1.2 问题和BUG
2 Makefile文件介绍
2.1 规则的格式
2.2一个简单的Makefile文件
2.3make处理Makefile文件的过程
2.4使用变量简化Makefile文件
2.5让make推断命令
2.6另一种风格的Makefile文件
2.7在目录中删除文件的规则
33编写Makefile文件
3.1Makefile文件的内容
3.2Makefile文件的命名
3.3包含其它的Makefile文件
3.4变量MAKEFILES
3.5Makefile文件重新生成的过程
GNU make 中文手册
GNU make中文手册
ver - 3.8
翻译整理:徐海兵
2004-09-11
目录Table of Contents
GNU make中文手册 (1)
ver - 3.8 (1)
第一章:概述 (7)
1.1概述 (7)
1.2准备知识 (8)
第二章 GNU make 介绍 (9)
2GNU make 介绍 (9)
2.1Makefile简介 (10)
2.2Makefile规则介绍 (11)
2.3简单的示例 (12)
2.4make如何工作 (13)
2.5指定变量 (15)
2.6自动推导规则 (16)
2.7另类风格的makefile (17)
2.8清除工作目录过程文件 (18)
第三章:Makefile 总述 (20)
3Makefile总述 (20)
3.1Makefile的内容 (20)
3.2makefile文件的命名 (21)
3.3包含其它makefile文件 (22)
3.4变量 MAKEFILES (24)
3.5变量 MAKEFILE_LIST (26)
3.6其他特殊变量 (26)
3.7makefile文件的重建 (27)
3.8重载另外一个makefile (28)
3.9make如何解析makefile文件 (30)
3.9.1变量取值 (30)
3.9.2条件语句 (31)
3.9.3规则的定义 (31)
3.10总结 (31)
第四章:Makefile的规则 (33)
4Makefile规则 (33)
4.1一个例子 (33)
4.2规则语法 (34)
4.3依赖的类型 (35)
4.4文件名使用通配符 (36)
GNUmake项目管理工具的使用
GNUmake项目管理工具的使用
课程名称:软件工程
实验项目名称:实验二GNU make项目管理工具的使用
一、实验目的:
1.熟悉GNU make的操作知识;
2.掌握如何创建makefile。
二、实验环境:
硬件:PC机,core Ⅱ双核CPU,2G以上内存;
软件:windows
三、实验内容及结果:
1、编写简单的makefile
1)根据《GNU Make项目管理(第三版)》第11页至第12页说明编写一个简单的makefile。
makefile及执行make命令的结果如下:
makefile:
gcc hello.c –o hello
$ make
gcc hello.c -o hello
2)根据《GNU Make项目管理(第三版)》第12页至第14页说明编写一个makefile,学习了解makefile文件中一项规则的三个部分:工作目标、它的必要条件、所要执行的命令。
makefile及执行make命令的结果如下
$ make
gcc -c count_words.c
flex -t lexer.l > lexer.c
gcc -c lexer.c
gcc count_words.o lexer.o -lfl -o count_words
2、规则的学习
1)根据《GNU Make项目管理(第三版)》第25页至第27页说明编写一个makefile,学习了解makefile文件中的变量。
makefile及执行make命令的结果如下:
$ make
gcc -c counter.c
gcc count_words.o counter.o lexer.o /lib/libfl.a -o count_words
makefile 中文手册 第六章 _ Makefile中的变量
第六章:Makefile中的变量
在Makefile中,变量是一个名字(像是C语言中的宏),代表一个文本字符串(变量的值)。在Makefile的目标、依赖、命令中引用变量的地方,变量会被它的值所取代(与C语言中宏引用的方式相同,因此其他版本的make也把变量称之为“宏”)。在Makefile中变量有以下几个特征:
1.Makefile中变量和函数的展开(除规则命令行中的变量和函数以外),是在make读取makefile文件时
进行的,这里的变量包括了使用“=”定义和使用指示符“define”定义的。
2.变量可以用来代表一个文件名列表、编译选项列表、程序运行的选项参数列表、搜索源文件的目录列
表、编译输出的目录列表和所有我们能够想到的事物。
3.变量名是不包括“:”、“#”、“=”、前置空白和尾空白的任何字符串。需要注意的是,尽管在GNU
make中没有对变量的命名有其它的限制,但定义一个包含除字母、数字和下划线以外的变量的做法也是不可取的,因为除字母、数字和下划线以外的其它字符可能会在make的后续版本中被赋予特殊含义,并且这样命名的变量对于一些shell来说是不能被作为环境变量来使用的。
4.变量名是大小写敏感的。变量“foo”、“Foo”和“FOO”指的是三个不同的变量。Makefile传统做
法是变量名是全采用大写的方式。推荐的做法是在对于内部定义定义的一般变量(例如:目标文件列表objects)使用小写方式,而对于一些参数列表(例如:编译选项CFLAGS)采用大写方式,但这并不是要求的。但需要强调一点:对于一个工程,所有Makefile中的变量命名应保持一种风格,否则会显得你是一个蹩脚的程序员(就像代码的变量命名风格一样)。
Gnu Make指南
| 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程
GNU make 指南
蓝森林 2000年8月10日 10:56作 者: 哈少
译者按: 本文是一篇介绍 GNU Make 的文章,读完后读者应该基本掌握了
make 的用法。而 make 是所有想在 Unix (当然也包括 Linux )系统上编程
的用户必须掌握的工具。如果你写的程序中没有用到 make ,则说明你写的程
序只是个人的练习程序,不具有任何实用的价值。也许这么说有点 儿偏激,但
make 实在是应该用在任何稍具规模的程序中的。希望本文可以为中国的 Unix
编程初学者提供一点儿有用的资料。中国的 Linux 用户除了学会安装红帽子以
外, 实在应该尝试写一些有用的程序。个人想法,大家参考。
C-Scene 题目 #2
多文件项目和 GNU Make 工具
作者: 乔治富特 (Goerge Foot)
电子邮件: george.foot@
Occupation: Student at Merton College, Oxford University, England
职业:学生,默尔顿学院,牛津城大学,英格兰
IRC匿名: gfoot
拒绝承诺:作者对于任何因此而对任何事物造成的所有损害(你所拥有或不拥
有的实际的,抽象的,或者虚拟的)。所有的损坏都是你自己的责任,而与我
无关。
所有权: “多文件项目”部分属于作者的财产,版权归乔治富特1997年五
月至七月。其它部分属 CScene 财产,版权 CScene 1997年,保留所有版
Automake中文手册
automake中文手册收藏
GNU Automake
For version 1.3, 3 April 1998 David MacKenzie and Tom Tromey
目录
·介绍
·通用性概念
o通用操作
o深度
o严格性
o统一命名机制
o派生变量是如何命名的
·一些实例软件包
o一个简单的例子,从起点到终点
o一个经典的程序
o创建etags和ctags
·创建`Makefile.in'
·扫描`configure.in'
o配置需求
oAutomake能够识别的其它事情
o自动生成的aclocal.m4
o由Automake支持的Autoconf宏 o编写你自己的aclocal宏
·顶层`Makefile.am'
·创建程序和库
o创建一个程序
o创建一个库
o对LIBOBJS和ALLOCA的特别处理 o创建一个共享库
o创建一个程序时使用的变量
o对Yacc和Lex的支持
oC++和其它语言
o自动de-ANSI-fication
o自动的依赖性(dependency)跟踪
·其它派生对象
o可执行的脚本
o头文件
o与体系结构无关(Architecture-independent)的数据文件
o已创建的源代码
·其它GNU工具
oEmacs Lisp
oGettext
oGuile
oLibtool
oJava
·创建文档
oTexinfo
oMan手册
·安装了些什么
·清除了些什么
·需要发布哪些文件
·对测试套件(test suites)的支持
·改变Automake的行为
·其它规则
o与etags之间的界面
o处理新的文件扩展名
·条件(Conditionals)
GNU Make 中文手册v3.8 学习
∙这个手册翻译整理: 徐海兵, 先表示一些尊敬. “本人在工作之余,花了18个多月时间完成对“info make”的翻译整理,完成这个中文版手册”, 工夫不负有心人.
∙链接器将.o文件中使用的函数和其它.o或者库文件中的相关符号进行合并,对所有文件中的符号进行重新安排(重定位),并链接系统相关文件(程序启动文件等)最终生成可执行程序。
∙Linux中,共享库文件格式通常为“ELF”格式。共享库已经具备了可执行条件。
∙模块中各个成员的地址(变量引用和函数调用)都是相对地址。使用此共享库的程序在运行时,共享库被动态加载到内存并和主程序在内存中进行连接。多个可执行程序可共享库文件的代码段(多个程序可以共享的使用库中的某一个模块,共享代码,不共享数据)。另外共享库的成员对象可被执行(由libdl.so提供支持)。
∙在make读取Makefile以后会建立一个编译过程的描述数据库。此数据库中记录了所有各个文件之间的相互关系,以及它们的关系描述(要是我能"看"到这个数据库,就能使用程序trace,你知道一个大型的project 的makefile有多复杂)
∙当使用make工具进行编译时,工程中以下几种文件在执行make时将会被编译(重新编译):
1. 所有的源文件没有被编译过,则对各个C源文件进行编译并进行链接,
生成最后的可执行程序;
2. 每一个在上次执行make之后修改过的C源代码文件在本次执行make
时将会被重新编译;
3. 头文件在上一次执行make之后被修改。则所有包含此头文件的C源
文件在本次执行make时将会被重新编译。(这就是为什么头文件修改后,很多文件都会被重新compile的原因)
GNU C编译器 中文手册
GCC 中文手册
GCC
Section: GNU Tools (1)
Updated: 2003/12/05
Index Return to Main Contents
NAME
gcc,g++-GNU工程的C和C++编译器(egcs-1.1.2)
总览(SYNOPSIS)
gcc[option|filename ]...
g++[option|filename ]...
警告(WARNING)
本手册页内容摘自GNU C编译器的完整文档,仅限于解释选项的含义.
除非有人自愿维护,否则本手册页不再更新.如果发现手册页和软件之间有所矛盾,请查对Info文件, Info文件是权威文档.
如果我们发觉本手册页的内容由于过时而导致明显的混乱和抱怨时,我们就停止发布它.不可能有其他选择,象更新Info文件同时更新man手册,因为其他维护GNU CC的工作没有留给我们时间做这个. GNU 工程认为man手册是过时产物,应该把时间用到别的地方.
如果需要完整和最新的文档,请查阅Info文件`gcc’或Using and Porting GNU CC (for version 2.0) (使用和移植GNU CC 2.0) 手册.二者均来自Texinfo原文件 gcc.texinfo.
描述(DESCRIPTION)
C和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的语言,但是对编译器来说,后缀名控制着缺省设定:
GNU Make简介
内容纲要
• GNU Make概述 • 关于Makefile • 编译开关 • 讨论
编译开关
• • • • • -c -o -I -D -W 编译成目标文件,不链接 目标文件名称 #include <xxxx.h> 宏定义 编译警告控制,要求使用-Wall打开所有警告开关
gcc -c -Wall -I"D:\work\tempproject\include" -D ABC=3 -o main.o main.c
关于Makefile-隐藏规则
OBJS = main.o common.o CC = gcc CFLAGS = -Wall HelloWorld: $(OBJS) $(CC) $(CFLAGS) -o HelloWorld $(OBJS) 增加依赖关系: OBJS = main.o common.o CC = gcc CFLAGS = -Wall HelloWorld: $(OBJS) $(CC) $(CFLAGS) -o HelloWorld $(OBJS) depends : main.c common.c gcc -M main.c common.c > depends -include depends
关于Makefile-函数
OBJS = $(patsubst %.c,%.o,$(wildcard *.c)) CC = gcc CFLAGS = -Wall HelloWorld: $(OBJS) $(CC) $(CFLAGS) -o HelloWorld $(OBJS) .PHONY : clean clean : -rm *.o *.exe
makefile基础教程-GNUmake介绍
第二章:GNU make 介绍
make在执行时,需要一个命名为Makefile的文件。这个文件告诉make以何种方式编译源代码和链接程序。典型地,可执行文件可由一些.o文件按照一定的顺序生成或者更新。如果在你的工程中已经存在一个活着多个正确的Makefile。当对工程中的若干源文件修改以后,需要根据修改来更新可执行文件或者库文件,正如前面提到的你只需要在shell下执行“make”。make会自动根据修改情况完成源文件的对应.o文件的更新、库文件的更新、最终的可执行程序的更新。
make通过比较对应文件(规则的目标和依赖,)的最后修改时间,来决定哪些文件需要更新、那些文件不需要更新。对需要更新的文件make就执行数据库中所记录的相应命令(在make读取Makefile以后会建立一个编译过程的描述数据库。此数据库中记录了所有各个文件之间的相互关系,以及它们的关系描述)来重建它,对于不需要重建的文件make什么也不做。
而且可以通过make的命令行选项来指定需要重新编译的文件。
Problems and Bugs
=================
If you have problems with GNU `make' or think you've found a bug, please report it to the developers; we cannot promise to do anything but we might well want to fix it.
Before reporting a bug, make sure you've actually found a real bug.Carefully reread the documentation and see if it really says you can do what you're trying to do. If it's not clear whether you should be able to do something or not, report that too; it's a bug in the documentation!
GNU-Make-使用手册(中译版)
GNU Make 使用手册(中译版)
翻译:于凤昌
译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构、理解Linux的编程总体设计及思想必须首先全部读通Linux源代码中各级的Makefile文件.目前,在网上虽然有一些著作,但都不能全面的解释Linux源代码中各级的Makefile文件,因此本人认真阅读了GNU Make 使用手册(3。79)版原文,在此基础上翻译了该手册,以满足对Linux源代码有兴趣或者希望采用GCC编写程序但对缺乏GNU Make全面了解之人士的需要。本人是业余爱好不是专业翻译人士,如果有问题请通过电子信箱与我联系共同商讨,本人的E—mail为:yfc70@public2。。注意在文章中出现的斜体加粗字表示章节。
GNU make Version 3。79
April 2000
Richard M。 Stallman and Roland McGrath
目录
1 make概述
1.1 怎样阅读本手册
1.2 问题和BUG
2 Makefile文件介绍
2。1 规则的格式
2。2一个简单的Makefile文件
2.3make处理Makefile文件的过程
2。4使用变量简化Makefile文件
2。5让make推断命令
2。6另一种风格的Makefile文件
2。7在目录中删除文件的规则
33编写Makefile文件
3.1Makefile文件的内容
3.2Makefile文件的命名
3。3包含其它的Makefile文件
3。4变量MAKEFILES
3.5Makefile文件重新生成的过程
GNU Make开发快速入门(一)——Make基础知识
“ 准 工具 包 ” 选 择 Ma e 项 , 标 , k选 由 于 后 边 要 介 绍 自 动 生 成 Ma ei 文件 , 以还要 选 择 “ k fe l 所 额 外 工 具 包 ” 的 相 关 选 项 a tma e .最 后 单 击 “ 新 ” uo k l 5 更
进行编译需要花费很长的时间。
相关软件 的安装
如 果 系统 安 装 时 已经安 装了
Ma e k ,那 么 就 可 以 直 接 使 用 了 。
它编 译链 接 就 是一 件非 常 困难 的
工 作 ,而且 有 可 能会 漏 掉一 些 部
分 。当 多 个 程 序 员 一 起 进 行 工 程
开 发 的时 候 ,更 要考 虑 协调 好程
维普资讯 http://www.cqvip.com
开 i哿 j 鼢
知 识 学 堂
I I术 I I I l I I I I 技 讲 座
GNU k Ma e是一个 自动 生成和维 护 目标程 序的工 具 ,它可 以 自动管理 软件 编译 的内容 、方式 和时机 , 是 Ln x编 程工具 箱 中一个关 键工具 。本文 将分三讲 介绍如 何使用 GNU Ma e iu k 进行 Ln x程序 开发。第一 iu 篇主要讲 解 Ma e k 基础 知识 l第二 篇介 绍 Ma e命令详细 选项 及调试技 巧 。第三 篇是 Ma e k k 高级 应用 。
使用GNUmake编辑makefile(精)
以同样的方法,接下来对文件code.o做类似 的检查,依赖文件是code.c和code.h。当 make执行完所有这些套嵌的规则后,make 将处理最顶层的test规则。如果关于prog.o 和code.o的两个规则中的任何一个被执行, 至少其中一个.o目标文件就会比test新,那 么就要执行test规则中的命令,因此make去 执行gcc命令将prog.o和code.o连接成目标 文件test。 在上面Makefile的例子中,还定义了一个目 标clean,它是Makefile中常用的一种专用 目标,即删除所有的目标模块。
例如,有以下的Makefile文件: # 一个简单的Makefile的例子 # 以#开头的为注释行 test:prog.o code.o gcc –o test prog.o code.o prog.o:prog.c prog.h code.h gcc –c prog.c –o prog.o
code.o:code.c code.h
使用GNU make编辑makefile
1. 准备工作 要使用make,必须编写一个叫做 Makefile的文件,这个文件描述了软件包中 文件之间的关系,提供更新每个文件的命令。 一般在一个软件包里,通常是可执行文件靠 目标文件来更新,目标文件靠编译源文件来 更新。
Makefile写好之后,每次改变了某些源文件, 只要执行make命令: make 所有必要的重新编译将执行。Make程序利 用makefile中的数据和每个文件的最后修 改时间来确定那个文件需要更新,对于需 要更新的文件,make程序执行makefile数 据中定义的命令来更新。
GNU make工具
解释:GNU make工具是一种代码维护工具,其主要任务是根据Makefile文件定义的规则和步骤,完成整个软件项目的代码生成和维护工作,GNU make将整个软件项目的代码开放在几个小的源文件中,在改动其中一个文件的时候,可以只对该文件进行重新编译,然后重新链接所有的目标文件,这样就大大的节省了编译时间1、使用make编译软件源码包一般步骤如下#./configure (生成Makefile文件)#make clean (进行清理工作)#make (编译源文件)#make install (安装可执行文件)一般在软件源码包文件夹中有configure这个文件,我们用./执行符来执行configure这个文件,用configure文件来生成Makefile文件,然后我们用make来对Makefile文件进行编译,编译生成可执行文件,编译完成后我们用make install来对编译后的执行文件进行安装,同时我们可以用make clean命令来对编译中产生的一起垃圾文件进行清理2、在/home/liudeguo目录下新建一个main.c的文本文件并在main.c文件中输入一段程序用vi命令,其实是用了vi编辑器打开来实现的,当用vi编辑器打开main.c文件时,如果liudeguo目录下有main.c文件则直接打开main.c文件,如果liudeguo目录下没有main.c文件则新建一个main.c文件,此时新建的main.c文件在Linux系统的内存中,还没有被保存到liudeguo目录下,所以需要在vi编辑器的末行命令模式中用:wq命令来保存退出即来保存刚刚新建的main.c文件,具体操作信息如下[root@localhost liudeguo]# vi main.c输入上述命令后此时main.c文件就被打开了,且其中没有任何内容,如果需要对本文本进行编辑则按i或a进入插入模式进行编辑,如果需要保存此文本则按ESC键进入末行命令模式,输入:wq命令来保存退出,下面用ls命令来查看liudeugo目录下是否有main.c文件,如果有则说明创建成功[root@localhost liudeguo]# ls在main.c文本中输入如下C语言程序,使用i键来进入vi编辑器的插入模式,即让main.c程序在终端下输出一句hello world!信息#include void main(){printf("hello world!\n");}输入完上述五行语句后,按ESC键进入vi编辑器的末行命令模式,按:wq保存退出3、Makefile文件的创建和编写A、Makefile简介在执行make之前,需要一个命名为Makefile的特殊文件(本文的后续将使用Makefile作为这个特殊文件的文件名)来告诉make需要做什么(完成什么任务),该怎么做,通常,make工具主要被用来进行工程编译和程序链接,下面我们来编写一个Makefile文件,让它自动来编译我们已经写好的main.c文件B、创建Makefile文件(Makefile可以写成makefile)用vi命令来创建Makefile文件,其实是用了vi编辑器打开来实现的,当用vi编辑器打开Make
GNUMake简单示例及官方文档
GNUMake简单⽰例及官⽅⽂档
Compiling your source code files can be tedious, specially when you want to include several source files and have to type the compiling command everytime you want to do it.
Well, I have news for you... Your days of command line compiling are (mostly) over, because YOU will learn how to write Makefiles. Makefiles are special format files that together with the make utility will help you to automagically build and manage your projects.
For this session you will need these files:
I recommend creating a new directory and placing all the files in there.
note: I use g++ for compiling. You are free to change it to a compiler of your choice
Makefile_中文教程
跟我一起写Makefile
什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi 的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了
一种在工程方面的编译方法。现在讲述如何写makefile的文章比较少,这是我想写这篇文章的原因。当然,不同产商的make各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章,这里,我仅对GNU的make进行讲述,我的环境是RedHat Linux 8.0,make的版本是3.80。必竟,这个make是应用最为广泛的,也是用得最多的。而且其还是最遵循于IEEE
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GNUΒιβλιοθήκη BaiduMake 使用手册(中译版)
7.1条件语句的例子 7.2条件语句的语法 7.3测试标志的条件语句 8 文本转换函数 8.1函数调用语法 8.2字符串替换和分析函数 8.3文件名函数 8.4函数foreach 8.5函数if 8.6函数call 8.7函数origin 8.8函数shell 8.9控制Make的函数 9 运行make 9.1指定Makefile文件的参数 9.2指定最终目标的参数 9.3代替执行命令 9.4避免重新编译文件 9.5变量重载 9.6测试编译程序 9.7选项概要 10 使用隐含规则 10.1使用隐含规则 10.2隐含规则目录 10.3隐含规则使用的变量 10.4隐含规则链 10.5定义与重新定义格式规则
2 Makefile文件介绍 2.1 规则的格式 2.2一个简单的Makefile文件 2.3make处理Makefile文件的过程 2.4使用变量简化Makefile文件 2.5让make推断命令 2.6另一种风格的Makefile文件 2.7在目录中删除文件的规则
3 编写Makefile文件 3.1Makefile文件的内容 3.2Makefile文件的命名 3.3包含其它的Makefile文件 3.4变量MAKEFILES 3.5Makefile文件重新生成的过程 3.6重载其它Makefile文件 3.7make读取Makefile文件的过程
2.1 规则的格式
一个简单的Makefile文件包含一系列的“规则”,其样式如下: 目标(target)…: 依赖(prerequiries)… <tab>命令(command)
… … 目标(target)通常是要产生的文件的名称,目标的例子是可执行文件或OBJ文件。目标也可是一个执行的动作名称,诸 如‘clean’(详细内容请参阅假想目标一节)。 依赖是用来输入从而产生目标的文件,一个目标经常有几个依赖。
4 编写规则 4.1规则的语法
http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html(第 1/79 页)2006-8-18 18:49:00
GNU Make 使用手册(中译版)
4.2在文件名中使用通配符 4.2.1通配符例子 4.2.2使用通配符的常见错误 4.2.3函数wildcard
命令是Make执行的动作,一个规则可以含有几个命令,每个命令占一行。注意:每个命令行前面必须是一个Tab字符,即命
令行第一个字符是Tab。这是不小心容易出错的地方。 通常,如果一个依赖发生变化,则需要规则调用命令对相应依赖和服务进行处理从而更新或创建目标。但是,指定命令更新 目标的规则并不都需要依赖,例如,包含和目标‘clern’相联系的删除命令的规则就没有依赖。 规则一般是用于解释怎样和何时重建特定文件的,这些特定文件是这个详尽规则的目标。Make需首先调用命令对依赖进行处 理,进而才能创建或更新目标。当然,一个规则也可以是用于解释怎样和何时执行一个动作,详见编写规则一章。 一个Makefile文件可以包含规则以外的其它文本,但一个简单的Makefile文件仅仅需要包含规则。虽然真正的规则比这里展示的 例子复杂,但格式却是完全一样。
1.2问题和BUG
如果您有关于GNU Make的问题或者您认为您发现了一个BUG,请向开发者报告;我们不能许诺我们能干什么,但我们会尽力 修正它。在报告BUG之前,请确定您是否真正发现了BUG,仔细研究文档后确认它是否真的按您的指令运行。如果文档不能 清楚的告诉您怎么做,也要报告它,这是文档的一个BUG。 在您报告或者自己亲自修正BUG之前,请把它分离出来,即在使问题暴露的前提下尽可能的缩小Makefile文件。然后把这个 Makefile文件和Make给出的精确结果发给我们。同时请说明您希望得到什么,这可以帮助我们确定问题是否出在文档上。 一旦您找到一个精确的问题,请给我们发E-mail,我们的E-mail地址是: bug-make@gnu.org 在邮件中请包含您使用的GNU Make的版本号。您可以利用命令‘make--version’得到版本号。同时希望您提供您的机器型号 和操作系统类型,如有可能的话,希望同时提供config.h文件(该文件有配置过程产生)。
1.1怎样阅读本手册
如果您现在对Make一无所知或者您仅需要了解对make 的普通性介绍,请查阅前几章内容,略过后面的章节。前几章节是普通 介绍性内容,后面的章节是具体的专业、技术内容。 如果您对其它Make程序十分熟悉,请参阅GNU Make的特点和不兼容性和失去的特点部分,GNU Make的特点这一章列出了 GNU Make对make程序的扩展,不兼容和失去的特点一章解释了其它Make程序有的特征而GNU Make缺乏的原因。 对于快速浏览者,请参阅选项概要、快速参考和内建的特殊目标名部分。
GNU Make 使用手册(中译版)
GNU Make 使用手册(中译版)
翻译:于凤昌 译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构、理解Linux的编程总体设计及思想必须首先全部读通 Linux源代码中各级的Makefile文件。目前,在网上虽然有一些著作,但都不能全面的解释Linux源代码中各级的Makefile文件, 因此本人认真阅读了GNU Make 使用手册(3.79)版原文,在此基础上翻译了该手册,以满足对Linux源代码有兴趣或者希望采 用GCC编写程序但对缺乏GNU Make全面了解之人士的需要。本人是业余爱好不是专业翻译人士,如果有问题请通过电子信箱
2 Makefile文件介绍
Make程序需要一个所谓的Makefile文件来告诉它干什么。在大多数情况下,Makefile文件告诉Make怎样编译和连接成一个程 序。 本章我们将讨论一个简单的Makefile文件,该文件描述怎样将8个C源程序文件和3个头文件编译和连接成为一个文本编辑器。
http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html(第 4/79 页)2006-8-18 18:49:01
4.3在目录中搜寻依赖 4.3.1VPATH:所有依赖的搜寻路径 4.3.2vpath指令 4.3.3目录搜寻过程 4.3.4编写搜寻目录的shell命令 4.3.5目录搜寻和隐含规则 4.3.6连接库的搜寻目录
4.4假想目标 4.5没有命令或依赖的规则 4.6使用空目录文件记录事件 4.7内建的特殊目标名 4.8具有多个目标的规则 4.9具有多条规则的目标 4.10静态格式规则
GNU Make 使用手册(中译版)
Makefile文件可以同时告诉Make怎样运行所需要的杂乱无章的命令(例如,清除操作时删除特定的文件)。如果要看更详细、 复杂的Makefile文件例子,请参阅复杂的Makefile文件例子一章。 当Make重新编译这个编辑器时,所有改动的C语言源文件必须重新编译。如果一个头文件改变,每一个包含该头文件的C语言 源文件必须重新编译,这样才能保证生成的编辑器是所有源文件更新后的编辑器。每一个C语言源文件编译后产生一个对应的 OBJ文件,如果一个源文件重新编译,所有的OBJ文件无论是刚刚编译得到的或原来编译得到的必须从新连接,形成一个新的 可执行文件。
与我联系共同商讨,本人的E-mail为:yfc70@public2.lyptt.ha.cn 。注意在文章中出现的斜体加粗字表示章节。
GNU make Version 3.79
April 2000
Richard M. Stallman and Roland McGrath
目录
1 make概述 1.1 怎样阅读本手册 1.2 问题和BUG
4.10.1静态格式规则的语法 4.10.2静态格式规则和隐含规则 4.11双冒号规则 4.12自动生成依赖 5 在规则中使用命令 5.1命令回显 5.2执行命令 5.3并行执行 5.4命令错误 5.5中断或关闭make 5.6递归调用make 5.6.1变量MAKE的工作方式 5.6.2与子make通讯的变量 5.6.3与子make通讯的选项 5.6.4`--print-directory'选项 5.7定义固定次序命令 5.8使用空命令 6 使用变量 6.1变量引用基础 6.2变量的两个特色 6.3变量高级引用技术 6.3.1替换引用 6.3.2嵌套变量引用 6.4变量取值 6.5设置变量 6.6为变量值追加文本 6.7override指令 6.8定义多行变量 6.9环境变量 6.10特定目标变量的值 6.11特定格式变量的值 7 Makefile文件的条件语句
10.5.1格式规则简介 10.5.2格式规则的例子 10.5.3自动变量 10.5.4格式匹配 10.5.5万用规则 10.5.6删除隐含规则 10.6定义最新类型的缺省规则 10.7过时的后缀规则 10.8隐含规则搜寻算法 11 使用make更新档案文件 11.1档案成员目标 11.2档案成员目标的隐含规则 11.2.1更新档案成员的符号索引表 11.3使用档案的危险 11.4档案文件的后缀规则 12 GNU make的特点 13 不兼容性和失去的特点 14 Makefile文件惯例 14.1makefile文件的通用惯例 14.2makefile文件的工具 14.3指定命令的变量 14.4安装路径变量 14.5用户标准目标
http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html(第 3/79 页)2006-8-18 18:49:01
GNU Make 使用手册(中译版)
14.6安装命令分类 15快速参考 16make产生的错误 17复杂的Makefile文件例子 附录 名词翻译对照表
2.2一个简单的Makefile文件
一个简单的Makefile文件,该文件描述了一个称为文本编辑器(edit)的可执行文件生成方法,该文件依靠8个OBJ文件(.o文 件),它们又依靠8个C源程序文件和3个头文件。 在这个例子中,所有的C语言源文件都包含‘defs.h’ 头文件,但仅仅定义编辑命令的源文件包含‘command.h’头文件,仅 仅改变编辑器缓冲区的低层文件包含‘buffer.h’头文件。 edit : main.o kbd.o command.o display.o \
1 Make 概述
Make 可自动决定一个大程序中哪些文件需要重新编译,并发布重新编译它们的命令。本版本GNU Make使用手册由Richard M. Stallman and Roland McGrath编著,是从Paul D. Smith撰写的V3.76版本发展过来的。 GNU Make符合IEEE Standard 1003.2-1992 (POSIX.2) 6.2章节的规定。 因为C语言程序更具有代表性,所以我们的例子基于C语言程序,但Make并不是仅仅能够处理C语言程序,它可以处理那些编 译器能够在Shell命令下运行的的各种语言的程序。事实上,GNU Make不仅仅限于程序,它可以适用于任何如果一些文件变化 导致另外一些文件必须更新的任务。 如果要使用Make,必须先写一个称为Makefile的文件,该文件描述程序中各个文件之间的相互关系,并且提供每一个文件的更 新命令。在一个程序中,可执行程序文件的更新依靠OBJ文件,而OBJ文件是由源文件编译得来的。 一旦合适的Makefile文件存在,每次更改一些源文件,在shell命令下简单的键入: make 就能执行所有的必要的重新编译任务。Make程序根据Makefile文件中的数据和每个文件更改的时间戳决定哪些文件需要更新。 对于这些需要更新的文件,Make基于Makefile文件发布命令进行更新,进行更新的方式由提供的命令行参数控制。具体操作请 看运行Make章节。