首页 > 其他分享 >Makefile 常见的错误信息

Makefile 常见的错误信息

时间:2024-08-09 16:28:12浏览次数:17  
标签:XXX target 错误 错误信息 make 常见 Stop Makefile

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

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

[FOO] Error NN
[FOO] signal description

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

1.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.2、commands commence before first target

commands commence before first target. Stop.

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

1.3、missing rule

missing rule before commands. Stop.

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

1.4、No rule

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

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

1.5、No targets

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

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

1.6、Makefile not found.

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

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

1.7、overriding commands for target

warning: overriding commands for target 'XXX'

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

1.8、gnoring old commands for target

warning: ignoring old commands for target 'XXX'

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

1.9、dependency dropped

Circular XXX <- YYY dependency dropped.

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

1.10、Recursive variable references itself

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

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

1.11、Unterminated variable reference

Unterminated variable reference. Stop.

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

1.12、insufficient arguments to function

insufficient arguments to function 'XXX'. Stop.

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

1.13、pattern 相关错误

missing target pattern. Stop.
multiple target patterns. Stop.
target pattern contains no '%'. Stop.             
mixed implicit and static pattern rules. Stop.

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

1.14、-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.15、jobserver unavailable

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

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

https://blog.csdn.net/stephenbruce/article/details/130049495

标签:XXX,target,错误,错误信息,make,常见,Stop,Makefile
From: https://www.cnblogs.com/spfanlost/p/18350972

相关文章

  • Spring Boot 常见注解的用法和功能
    ​前言        SpringBoot提供了大量注解,主要用于简化配置和开发,大致可分为核心注解、Web注解、依赖注入注解、数据访问注解、配置注解、条件注解、测试注解。一、核心注解@SpringBootApplication        作用: 标注一个主程序类,表明这是一个SpringBoo......
  • http常见请求参数
    类别请求参数主要分为以下几类:1、路径参数(PathParameters):参数通过URL的路径部分传递。例如: /users/123,123 是用户ID,作为路径参数。2、查询参数(QueryParameters):参数通过URL的查询部分传递,通常以键值对形式出现。例如: /search?query=python&sort=asc。3、......
  • 常见几种大语言模型压缩技术分析详解
    大型语言模型(LLM)在自然语言处理任务中取得了显著的成功,但同时也面临着模型过大、计算需求过高的问题。为了解决这些问题,模型压缩技术应运而生,旨在减小模型大小、降低计算复杂度并提升运行效率。本文将对LLM压缩技术进行详细的分析,包括剪枝、知识蒸馏和量化等关键技术,并结合......
  • 常见 反弹shell的方法
            在渗透测试的过程中,在拿到webshell以后,如果目标主机是Windows主机,则是通过开3389端口在远程连接,如果目标主机是linux服务器,一般我们都会选择反弹shell来进行操作。在这里总结下反弹shell常见的几种姿势。Bash反弹1.1方法一攻击者主机上执行监听:nc-lvvp......
  • 【JavaEE初阶】常见的锁策略
    目录......
  • Java多线程编程中的常见问题及优化策略
    Java多线程编程中的常见问题及优化策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!多线程的基本概念在Java中,多线程是指程序中可以同时运行多个线程,每个线程可以执行不同的任务。多线程可以提高程序的执行效率,但同时也带来了一些挑战。线程安全......
  • MySQL 常见日志清理策略
    前言:MySQL数据库服务器使用多种类型的日志来记录操作和事件,这对于故障诊断、审计和性能分析非常重要。然而,这些日志文件会随着时间的推移而不断增长,可能会占用大量的磁盘空间。因此,定期清理这些日志是必要的,本篇文章我们一起来学习下如何清理MySQL中的日志文件。二进制日志(......
  • Linux项目自动化构建工具-Makefile简介
    Makefile是Linux环境下常用的一个自动化构建工具,它主要用于编译和构建项目。Makefile文件描述了如何编译和链接程序,以及它们之间的依赖关系。使用Makefile可以简化编译过程,使得只需要重新编译那些自上次编译以来被修改过的文件,从而节省时间。基本概念目标(Targets):Makefi......
  • 常见的中间件漏洞:WebLogic
     WebLogic        WebLogic是美国Oracle公司出品的⼀个applicationserver,确切的说是⼀个基于JAVAEE架构的中间件,默认端⼝:7001WebLogic是⽤于开发、集成、部署和管理⼤型分布式Web应⽤、⽹络应⽤和数据库应⽤的Java应⽤服务器。将Java的动态功能和JavaEnterprise......
  • 常见的中间件漏洞:Tomcat
    Tomcat简介        tomcat是一个开源而且免费的isp服务器,默认端口:8080,属于轻量级应用服务器。它可以实现JavaWeb程序的装载,是配置JSP(JavaServerPage)和JAVA系统必备的一款环境。在历史上也披露出来了很多的漏洞,这里我们讲几个经典的漏洞复现一.CVE-2017-12615To......