Chinaunix首页 | 论坛 | 博客
  • 博客访问: 710424
  • 博文数量: 214
  • 博客积分: 5015
  • 博客等级: 大校
  • 技术积分: 2285
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-18 17:02
文章分类

全部博文(214)

文章存档

2008年(43)

2007年(171)

我的朋友

分类:

2007-10-02 18:52:46

Make命令:

         Make [参数] [] [目标 目标 ……]

         一般从第一条规则开始维护。检查顺序:第一个依赖文件——第一个依赖文件的依赖文件……    ——>第二个依赖文件——第二个依赖文件的依赖文件……   ……    树状一条路径逐层展开,直查找到依赖文件都是源文件,然后原路返回,查找下一条路径。同一规则的依赖文件按照从左至右顺序。

 

参数:

         -c dir 指定make工作后的工作目录

         -e 不允许makefile中给环境宏赋值

         -f filename 或--file filename 指定一个或顺序指定多个makefile文件

         -i 忽略makefile中命令执行是产生的错误,不中止make

         -k 执行命令出错,放弃当前目标文件,转向其他目标

         -n 或--just-print按实际执行是顺序显示命令,包括@开头的,但不实际执行

         -p 显示makefile中所有宏定义和内部规则

         -r 忽略内部规则

         -s 执行,但不显示执行的命令

         -S 执行makefile命令菜单时出错即退出makefile

         -t 或--touch修改每个目标文件的创建日期,但不真正重新创建目标文件

         -V 显示make版本号

         -x 把所有宏输出到环境

 

Make的基本规则:

         Target  [属性] 分隔符 [依赖文件] [;命令行 ]

           {Tab 命令行}

         注:命令行间可以加入任意多个空行,但空行也要以tab开头。Cat –v-t-e Makefile会使Makefile文件中tab^]显示,行尾以$显示。

         注:命令过长,用\来连接多行成一行。注释以#开头,如果#要用作字符符号,“#”。

 

分隔符

         ::目标有多个规则。哪条规则中的依赖文件比目标新,执行哪条规则。如果多条规则的依赖文件都比目标新,多条规则都执行。由于后面的规则可能覆盖前面规则的执行结构,所以规则顺序不同,执行结构也不同。

         ^把本规则依赖文件和目标文件已有的依赖文件合起来,生成目标新的依赖文件列表。

         -清除目标已有依赖文件,把本规则依赖文件作为目标依赖文件列表。

         :!对每个更新过的依赖文件都执行一次命令菜单。 ???

         |内部规则专用。 ???

如:file.o file.c

         file.o ^ filef.c 现依赖文件为file.c filef.c

         file.o - filef.c 现依赖文件为 filef.c

 

命令行属性

-          若本命令的执行错误,忽略掉,继续向下执行。(不加该标志,make会停止)

+   始终执行本命令,即使make参数使用了-n-q-t。(前提是本规则中依赖文件新与目标文件,命令行需要执行)

@  本命令行不在标准输出显示。

 

Target属性

         指定多个目标文件属性: 属性 属性 …… :目标 目标 ……

         规则中指定单个目标属性:目标 属性:[依赖文件] ……

         ·IGNORE 类似与命令行属性-

         ·SILENT 类似与命令行属性@

         ·PRECIOUS 保留中间文件

         ·LIBRARY 目标是一个库。如果make发现目标是libmember)或lib((entry))形式,会自动给名为lib的目标加上该属性。

         ·LIBRARYM 目标是库的一个成员。如果make发现目标是libmember)形式,会自动给lib目标加上·LIBRARY,被member目标加上·LIBRARYM。本属性不可在makefile文件显式声明。

         ·SYMBOL 目标是指定入口的库成员。Make会自动给lib((entry))的目标和依赖文件加上本属性。本属性不可在makefile文件显式声明。

 

命令行属性、目标属性、make参数都是用来控制make的,当三者属性发生矛盾时候,规则遵循的属性优先顺序为:命令行属性——目标属性——make参数,但三者都未指定,则用默认。

 

伪目标

         Linux提供的内部伪目标:

         ·ERROR

                   Make遇到错误,执行该目标规则。

·INCLUDE file1 ……

         包含其他makefile文件,其他makefile文件位于·INCLUDE规则的依赖文件位置。实际上,是把包含的文件内容copy到当前位置。比如:包含一个宏定义文件,以便在当前位置展开,本makefile文件可以用这些宏。形式:

                            ·INCLUDE filename1 filename2…… 

或要包含的文件不在当前文件夹

                            ·INCLUDE :路径1 路径2 ……

                            ·INCLUDE filename1 filename2 ……

或者

                            ·INCLUDE <路径/filename> ……

·IMPORT :宏 ……

         使用环境变量中的宏。

         ·IMPORT :·ENVERTHING 可以使用环境中所有宏了。

·EXPORT :宏 ……

         将宏及当前值输入环境变量中。

·SETDIR=路径

         改变当前工作路径。

 

注:有时候要定义的伪目标可能与文件名重。比如存在clean这个文件。可以用:

         PHONYclean

         cean

                   …………

         PHONY的作用是确保下面的clean是伪目标,非文件,从而避免混乱。

阅读(1204) | 评论(0) | 转发(0) |
0

上一篇:shell日常要点

下一篇:Makefile(二)

给主人留下些什么吧!~~