1. 常见的错误信息

make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -、或者 make 使用 -k 选项执行时。
make 执行过程的致命错误都带有前缀字符串 ***。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是 make);另外一种是当 Makefile 本身存在语法错误无法被 make 解析并执行时,前缀包含了 Makefile 文件名和出现错误的行号。

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

[FOO] Error NN
[FOO] signal description

这类错误并不是 make 的真正错误。它表示 make 检测到 make 所调用的作为执行命令的程序返回一个非零状态(Error NN),或者此命令程序以非正常方式退出(携带某种信号)。
如果错误信息中没有附加 *** 字符串,则是子过程的调用失败,如果 Makefile 中此命令有前缀 -make 会忽略这个错误。

  1. missing separator.
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] 字符开始的。

  1. commands commence before first target
commands commence before first target. Stop.

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

  1. missing rule
missing rule before commands. Stop.

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

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

无法为重建目标“XXX”找到合适的规则,包括明确规则和隐含规则。
修正这个错误的方法是:在 Makefile 中添加一个重建目标的规则。其它可能导致这些错误的原因是 Makefile 中文件名拼写错误,或者破坏了源文件树(一个文件不能被重建,可能是由于依赖文件的问题)。

  1. No targets
No targets specified and no makefile found. Stop.
No targets. Stop.

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

  1. Makefile not found.
Makefile 'XXX' was not found.
Included makefile 'XXX' was not found.

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

  1. overriding commands for target
warning: overriding commands for target 'XXX'

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

  1. gnoring old commands for target
warning: ignoring old commands for target 'XXX'

告警信息说新指定的命令覆盖了上一次指定的命令。

  1. dependency dropped
Circular XXX <- YYY dependency dropped.

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

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

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

  1. Unterminated variable reference
Unterminated variable reference. Stop.

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

  1. insufficient arguments to function
insufficient arguments to function 'XXX'. Stop.

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

  1. pattern 相关错误
missing target pattern. Stop.
multiple target patterns. Stop.
target pattern contains no '%'. Stop.
mixed implicit and static pattern rules. Stop.

不正确的静态模式规则。
第一条错误的原因是:静态模式规则的目标段中没有模式目标;
第二条错误的原因是:静态模式规则的目标段中存在多个模式目标;
第三条错误的原因是:静态模式规则的目标段目标模式中没有包含模式字符“%”;
第四条错误的原因是:静态模式规则的三部分都包含了模式字符“%”。正确的应该是只有后两个才可以包含模式字符“%”。

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

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

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

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

浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息相关推荐

  1. web开发中常见的错误信息

    1.Warning: mysql_connect() [function.mysql-connect]: Access denied for user'beijingphp'@'localhost'  ...

  2. Java 常见编译错误信息

    1.java:33: 不是语句 解释:程序中出现了没有任何意义的字符(串),可能是无意中打出了没有 任何意义的字符: 2.java:34: 需要';' 解释:某条语句没有以分号结束: 3.java:3 ...

  3. SMTP错误信息及解决方案

    群发邮件过程中,难免会遇到一些问题,下面整理出来一些常见的错误信息和解决方法. 535 Error: 请使用授权码登录 原因及解决方案:使用QQ邮箱授权码,可在QQ邮箱设置中生成授权码. 554 IP ...

  4. Makefile的常见错误信息

     转载:http://blog.csdn.net/wanruirui/article/details/5894780 本章是对 make 执行过程中可能出现常见错误进行汇总.分析,并给出修正的可能 ...

  5. Makefile入门: 用最美味的例子

    目录 入门 为什么存在 Makefile? Make 有哪些替代方案? 运行示例 生成文件语法 初学者示例 变量 目标 全部目标 多个目标 自动变量和通配符 * 通配符 % 通配符 自动变量 花式规则 ...

  6. Makefile 入门教程

    1.Makefile简介 Makefile 定义了软件开发过程中,项目工程编译链.链接的方法和规则. 由 IDE 自动生成或者开发者手动书写. Unix(MAC OS.Solaris)和Linux(R ...

  7. MakeFile入门详解

          makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和profession ...

  8. 编程英语:常见代码错误 error 语句学习(12)

    编程英语:常见代码错误 error 语句学习(12) error 1:Unit file format error 单元文件格式错误 error 2:Constant and case types d ...

  9. 常见笔顺错误的字_语文老师整理:12组常见笔顺易错字!很实用的资料,帮孩子收好!...

    语文老师整理汇总:这12组小学常见字,很多孩子都写错了笔顺! 大家好,欢迎关注[内容匠人说教育],记得右上角关注哦!今天给大家分享的是资深小学语文老师为我们整理的12组常见笔顺易错字,这些字都是小学阶 ...

最新文章

  1. Linux中close的用法,linux下 open() write() read() close函数
  2. [asp]统计在线人数情况
  3. 在netbeans下使用调试PHP的插件XdeBug
  4. html按钮不可选中,如何使HTML文本不可选择
  5. python断点续传下载_python requests 断点续传下载
  6. Mysql查询某字段值重复的数据个数
  7. python 打印类型_让Python输出更漂亮:PrettyPrinter
  8. JAVA延迟执行(thread方式和timer方式)
  9. java的常用注解有哪些_spring系列笔记之常用注解
  10. Cocoa Autolayout:内容拥抱与内容压缩阻力优先
  11. 技能大赛 计算机 融合 研究,技能大赛与高职计算机教学的融合研究.doc
  12. javascript 的线程问题
  13. 准备将redis引入项目做消息队列使用
  14. 服务器主板电池的电压不稳定怎么办,轻松解决CMOS掉电烦恼这绝招
  15. 【word】如何在word宏里面写vb代码选中所有表格
  16. 最新江西建筑八大员(材料员)模拟真题集及答案解析
  17. Leetcode_116_Populating Next Right Pointers in Each Node
  18. ES6新增关键字:let和const及let的常用场景
  19. 浅谈“POODLE信息泄露漏洞”
  20. 零售数字化必经哪四个阶段?

热门文章

  1. Spring中启用Hibernate二级缓存步骤
  2. 数据结构(08)— 线性单链表基本操作
  3. fatal error all goroutines are asleep - deadlock!
  4. java数据类型相互转换工具类
  5. 云计算灾备原理与预防恢复方案
  6. deeplearning模型量化实战
  7. MindSpore数据集mindspore::dataset
  8. 什么是视觉Visual SLAM
  9. 空间点像素索引(二)
  10. 给手绘图着色(添加颜色或色彩):CVPR2020论文点评