Unix爱好者家园最引人注目的广告位!
  欢迎 xxtcfpl 加入本站!
 免费注册  用户登陆  汇款方式  汇款确认  产品报价  联系我们  帮助中心

加入收藏
设为首页
会员体系
申请VIP
网站首页 光盘超市 软件下载 技术文章 专题 用户中心 VIP会员 网站留言 论坛 站内搜索 卓越资源 源代码

今天是:2010年03月13日 星期六  您现在位于: 首页 → 技术文章 → GNU make中文手...
   GNU make中文手册-(15)make的常见错误信息
作者:  出处:Unix爱好者家园unix-cd.com  更新时间: 2006年03月17日 

--------------------------------------------------------------------------------

本章是对make执行过程中可能出现常见错误进行汇总、分析,并给出修正的可能方法。

make执行过程中产生的错误并不是所有都是致命的;特别在命令行之前使用“-”、或者使用make的“-k”选项。make执行过程的致命错误都带有前缀字符串“***”。

错误的信息都有前缀,一种是执行程序名作为错误的前缀(通常是“make”);另外一种是当Makefile本身存在错误时,前缀包含了文件名和出现错误的行号。

在下述的错误列表中,省略了普通的前缀:

[FOO] Error NN

[FOO] signal description

这类错误并不是make的真正的错误。它表示make所调用的程序返回非零的错误码(Error NN),这种情况make会将其作为失败处理、或者以非正常方式退出(携带某种信号),参考 5.4 命令的错误 一节。

 

如果错误信息中没有附加“***”字符串,则是子过程的调用失败,如果Makefile中此命令有前缀“-”,make会忽略这个错误。

missing separator. Stop.

missing separator (did you mean TAB instead of 8 spaces?). Stop.

不可识别的命令行,make在读取Makefile过程中不能解析其中包含的内容。GNU make在读取Makefile时根据各种分隔符(:, =, [TAB]字符等)识别Makefile的每一行内容。这些错误意味着make不能发现一个合法的分隔符。

 

出现这些错误信息的可能的原因是(或许是编辑器,绝大部分是ms-windows的编辑器)在Makefile中的命令之前使用了4个(或者8个)空格代替了[Tab]字符。这种情况,将产生上述的第二种形式产生错误信息。且记,所有的命令行都应该是以[Tab]字符开始的。

commands commence before first target. Stop.

missing rule before commands. Stop.

Makefile可能是以命令行开始:以[Tab]字符开始,但不是一个合法的命令行(例如,一个变量的赋值)。命令行必须和规则一一对应。

 

产生第二种的错误的原因可能是一行的第一个非空字符为分号,make会认为此处遗漏了规则的“target: prerequisite”部分。

No rule to make target `XXX'.

No rule to make target ` XXX ', needed by `yyy'.

无法为重建目标“XXX”找到合适的规则,包括明确规则和隐含规则。

 

修正这个错误的方法是:在Makefile中添加一个重建目标的规则。其它可能导致这些错误的原因是Makefile中文件名拼写错误,或者破坏了源文件树(一个文件不能被重建,可能是由于依赖文件的问题)。

No targets specified and no makefile found. Stop.

No targets. Stop.

第一个错误表示在命令行中没有指定需要重建的目标,并且make不能读入任何makefile文件。第二个错误表示能够找到makefile文件,但没有终极目标或者没有在命令行中指出需要重建的目标。这种情况下,make什么也不做。

Makefile `XXX' was not found.

Included makefile `XXX' was not found.

没有使用“-f”指定makefile文件,make不能在当前目录下找到默认Makefile(makefile或者GNUmakefile)。使用“-f”指定文件,但不能读取这个指定的makefile文件。

warning: overriding commands for target `XXX'

warning: ignoring old commands for target `XXX'

对同一目标“XXX”存在一个以上的重建命令。GNU make规定:当同一个文件作为多个规则的目标时,只能有一个规则定义重建它的命令(双冒号规则除外)。如果为一个目标多次指定了相同或者不同的命令,就会产生第一个告警;第二个告警信息说新指定的命令覆盖了上一次指定的命令。

Circular XXX <- YYY dependency dropped.

规则的依赖关系产生了循环:目标“XXX”的依赖文件为“YYY”,而依赖“YYY”的依赖列表中又包含“XXX”。

Recursive variable `XXX' references itself (eventually). Stop.

make的变量“XXX”(递归展开式)在替换展开时,引用它自身。无论对于直接展开式变量(通过:=定义的)或追加定义(+=),这都是不允许的。参考 第 5 章 使用变量

Unterminated variable reference. Stop.

变量或者函数引用语法不正确,没有使用完整的的括号(缺少一左括号或者右括号)。

insufficient arguments to function `XXX'. Stop.

函数“XXX”引用时参数数目不正确。函数缺少参数。

missing target pattern. Stop.

multiple target patterns. Stop.

target pattern contains no `%'. Stop.

mixed implicit and static pattern rules.  Stop.

不正确的静态模式规则。

第一条错误的原因是:静态模式规则的目标段中没有模式目标;

第二条错误的原因是:静态模式规则的目标段中存在多个模式目标;

第三条错误的原因是:静态模式规则的目标段目标模式中没有包含模式字符“%”;

第四条错误的原因是:静态模式规则的三部分都包含了模式字符“%”。正确的应该是只有后两个才可以包含模式字符“%”。

关于静态模式规则可参考 3.12 静态模式 一节

warning: -jN forced in submake: disabling jobserver mode.

这一条告警和下条告警信息发生在:make检测到递归的make调用时,可通信的子make进程出现并行处理的错误(参考 5.6 make的递归执行 一节)。递归执行的make的命令行参数中存在“-jN”参数(N的值大于1),在有些情况下可能导致此错误,例如:Makefile中变量“MAKE”被赋值为“make –j2”,并且递归调用的命令行中使用变量“MAKE”。在这种情况下,被调用make进程不能和其它make进程进行通信,其只能简单的独立的并行处理两个任务”。

warning: jobserver unavailable: using -j1. Add `+' to parent make rule.

为了现实make进程之间的通信,上层make进程将传递信息给子make进程。在传递信息过程中可能存在这种情况,子make进程不是一个实际的make进程,而上层make却不能确定子进程是否是真实的make进程。它只是将所有信息传递下去。上层make采用正常的算法来决定这些(参考 5.6.1 变量MAKE 一小节)。当出现这种情况,子进程只会接受父进程传递的部分有用的信息。子进程会产生该警告信息,之后按照其内建的顺序方式进行处理。

 (本文已被浏览 6045 次)
 发布人:sdccf
 → 推荐给我的好友
上篇文章:GNU make中文手册-(14)Makefile...
下篇文章:GNU make中文手册-(附录)关键字索引
 相关文章:
Linux系统下软件包管理(7) Linux系统下软件包管理(6)
Linux系统下软件包管理(5) Linux系统下软件包管理(4)
Linux系统下软件包管理(3) 让Linux象Windows一样安装卸载
GNU make中文手册 将Unix应用程序移植到Linux系统详解
GDB调试精粹及使用实例 GNU线性编程中的中间问题
Linux下用Gnuplot科学绘图入门 shell编程例子 -- 一个makefile例子
Linux操作系统中GCC的应用介绍(上) Linux基础认识 理解GNU/Linux
常用命令之 make常见规则解析 Linux/Unix环境下的make和makefile详解
FreeBSD中的GNU C编译器--编译器GCC Debian 3.1 桌面安装方法
GNU make中文手册-(附录)关键字索引 GNU make中文手册-(14)Makefile的约定

相关搜索
查看百度中关于GNU make中文手册-(15)make的常见错误信息的更多内容
查看google中关于GNU make中文手册-(15)make的常见错误信息的更多内容
   文章分类
操作系统 |
SCO_UNIX  Sun_Solaris  IBM_AIX  HP_UX  Linux  BSD  Tru64_UNIX 
通用UNIX知识  Windows  Minix 
程序设计 |
Shell编程  C/C++  汇编  PHP  JAVA  Perl  Python 
ASP/HTML  XML  中间件 
数据库 |
Oracle  Informix  Sybase  Fox  DB2  SQL  MySQL 
PostgreSQL 
网络应用 |
网络应用 
计算机硬件 |
计算机主机  打印机  路由器  交换机  终端  磁带机  MO 
刻录机  终端服务器  调制解调器 
   文章评论
  → 评论内容 (点击查看)   共0条评论,每页显示5条评论   浏览所有评论
(没有相关评论)
  → 发表我的评论
您的姓名: 您的Email:
评论内容:
250字内
发表评论:      发表评论须知 →
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  • 关于我们 ┋  网站留言 ┋  网站地图 ┋  友情链接 ┋  与我在线 ┋  汇款确认 ┋  管理 ┋  TOP
    Unix爱好者家园  http://www.unix-cd.com/
    联系我们:sdccf@163.com
    腾讯QQ: 7644599
    备案序号:鲁ICP备09036304号
    Copyright (c) 2001-2010 Unix-cd.com. All Rights Reserved.