`
maping
  • 浏览: 40793 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

make的常见错误信息

阅读更多

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

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

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

[FOO] Error NN

[FOO] signal description

这类错误并不是 make 的真正错误。它表示 make 检测到 make 所调用的作为执行命令的程序返回一个非零状态( Error NN ),或者此命令程序以非正常方式退出(携带某种信号),参考 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 什么也不做。参考 第九章 执行 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 ”(递归展开式)在替换展开时,引用它自身。无论对于直接展开式变量(通过 := 定义的)或追加定义( += ),这都是不允许的。

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.

不正确的静态模式规则。

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

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

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

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

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

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

这一条告警和下条告警信息发生在: make 检测到递归的 make 调用时,可通信的子 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 采用正常的算法来决定这些。当出现这种情况,子进程只会接受父进程传递的部分有用的信息。子进程会产生该警告信息,之后按照其内建的顺序方式进行处理。

分享到:
评论

相关推荐

    Android源码编译make的错误处理

    #### 三、常见错误及其处理方法 ##### 1. 处理32位系统编译限制 在某些情况下,编译脚本会检查系统的位数,并阻止在32位系统上进行编译。这是因为官方文档指出,从Froyo/2.2版本开始,只支持64位的构建环境。解决...

    GNUmake v3 中文版.chm

    目 录 第一章:概述 第二章:GNU make 介绍 第三章:Makefile 总述 第四章:Makefile的规则 第六章:Makefile中的变量 第七章:Makefile的条件执行 第九章:执行make ...第十五章 make的常见错误信息

    linuxcentos安装nginx常见错误及解决办法.pdf

    Linux CentOS 安装 Nginx 常见错误及解决办法,这篇文章旨在解决 Linux CentOS 下安装 Nginx 时常见的一些错误,包括无法站外访问、编译 pcre 错误、make 错误、依赖软件未安装错误等,通过这些解决方法,读者可以更...

    minigui移植常见错误的解决方法

    ### Minigui移植过程中的常见错误及解决方法 #### 一、引言 Minigui是一款优秀的嵌入式GUI系统,适用于多种嵌入式设备。然而,在将其移植到不同的硬件平台(如QQ2440)的过程中,往往会遇到各种各样的问题。本文将...

    GNU MAKE 中文手册

    GNU MAKE的详细中文手册,目录如下: ...第十五章 make的常见错误信息   附录:关键字索引 1. GNU make可识别的指示 符 2. GNU make函数 3. GNU make的自动化变量 4. GNU make环境变量 后序

    GNU Make项目管理(第三版)

    最后,为了帮助读者更好地理解和调试Makefile,书中专门用一章介绍了makefile的调试技巧,包括如何编写调试代码、如何处理常见的错误信息等,这些都是确保Makefile能够正确无误地执行的关键。 综合来看,《GNU Make...

    gun make.pdf

    最后,文档还包含了GNU Make的快速参考指南,以及make过程中可能产生的错误信息列表。在文档的最后,有一个概念索引和函数、变量、指令索引,方便读者查找相关知识点。 文档遵循GNU自由文档许可证,即GNU FDL,这是...

    内核升级&常见错误.pdf

    务必确保对错误信息进行仔细分析,以便正确快速地解决问题,而不建议同时执行所有编译命令,因为一旦出现错误,可能会因为同时进行的多个操作而难以判断问题所在。最后,升级内核后更新引导菜单的默认项,确保下次...

    gnu make 英文手册

    - **常见错误消息**:解释 make 报告的典型错误信息。 - **错误处理**:如何解决这些错误。 #### 附录 C:复杂 Makefile 示例 - **综合案例**:展示一个实际项目的 Makefile 示例。 #### 概念索引与功能索引 - *...

    GNU make-3.79.1.tar.gz

    这个版本号表示这是一个稳定版的发布,其中包含了之前版本的改进和错误修复。3.79.1可能解决了前一版本中发现的问题,增强了性能,或者添加了新功能以适应不断变化的开发环境。 4. **tar.gz格式**: "tar.gz"是一...

    GNU make 帮助文档

    文档还包含了一个快速参考部分(Quick Reference),一个由make生成的错误列表(Errors Generated by Make),以及一个复杂的Makefile示例(Complex Makefile Example)。最后,为了方便用户查找特定概念、函数、...

    Linux下的make指令手册

    总体而言,这本手册是Linux环境下make指令的权威指南,它覆盖了从基本使用到高级特性、从常见问题解决到错误处理的方方面面,适合各个层次的Linux用户学习和参考。通过细致的阅读和实践,用户可以高效地利用make工具...

    GNU Make 中文手册

    8. **调试和错误处理**:学习如何使用 `make --trace`, `--dry-run`, 和 `-d` 选项来调试 Makefile,以及如何优雅地处理构建过程中的错误。 9. **Make 的工作原理**:手册还会深入到 Make 的内部机制,包括目标的...

    GNU make 中文手册

    10. **错误处理和调试**:make提供了丰富的错误处理机制,如错误检查和停止机制。通过`-d`选项,可以开启调试模式,查看make的详细执行过程。 总之,《GNU make 中文手册》是学习和掌握自动化构建流程的关键资源,...

    mtk android 编译常见错误

    ### MTK Android 编译常见错误及解决方案 在编译 MTK Android 源码时,开发者经常会遇到一些常见的编译错误。这些错误通常与环境配置、依赖库安装不完整等因素有关。以下是一些常见的编译错误及其解决方法: #### ...

    linux下安装snort常见错误

    Linux下安装Snort常见错误解决方法 Snort是一款开源的入侵检测系统,具有很高的检测率和防护能力。然而,在Linux下安装Snort时,常常会出现一些错误,这些错误可能会导致安装失败。下面将详细介绍Linux下安装Snort...

    Gnu Make 使用手册

    在实际开发中,合理组织Makefile可以帮助团队保持构建一致性,减少错误,并提高开发效率。例如,使用include指令可以将通用规则分离到单独的文件中,便于复用和维护。编写清晰、模块化的Makefile也是良好工程实践的...

    Go-Mmake是一个对make进行封装并提供额外的功能

    Go-Mmake可能还包含其他增强功能,如错误处理、性能优化、自定义规则和变量等。这些特性都是为了更好地适应Go语言的开发流程,提供更加灵活和高效的构建解决方案。例如,它可能内置了对Go标准库和第三方库的兼容性...

    MTK程序编译及常见错误分析.doc

    【MTK程序编译及常见错误分析】 MTK(MediaTek)程序的编译过程是构建基于MTK平台的应用或系统的关键步骤。本文档旨在帮助开发者深入理解这一过程,以便快速解决编译过程中遇到的问题,并为未来的编译优化提供指导...

Global site tag (gtag.js) - Google Analytics