makefile 的常见错误信息

NUC980编译错误,multiple target patterns(多个目标匹配) make make clean make disclean 阅读详情

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.               <<<====我编译J_SIM时出现的错误!
mixed implicit and static pattern rules. Stop.
不正确的静态模式规则。
第一条错误的原因是:静态模式规则的目标段中没有模式目标;
第二条错误的原因是:静态模式规则的目标段中存在多个模式目标;
第三条错误的原因是:静态模式规则的目标段目标模式中没有包含模式字符“%”;
第四条错误的原因是:静态模式规则的三部分都包含了模式字符“%”。正确的应该是只有后两个才可以包含模式字符“%”。


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采用正常的算法来决定这些。当出现这种情况,子进程只会接受父进程传递的部分有用的信息。子进程会产生该警告信息,之后按照其内建的顺序方式进行处理。



我写了一个Makefile,是用来在Linux2.4下编译一个模块的,其内容如下:
INCLUDEDIR = /usr/src/linux-2.4/include
DEBFLAGS = -O2
CC = gcc
CFLAGS = -D__KERNEL__ -DMODULE -Wall $(DEBFLAGS)
CFLAGS += -I$(INCLUDEDIR)
TARGET = ds1307
OBJS = $(TARGET).o
SRC = $(TARGET).c
$(CC) $(CFLAGS)
当我执行make的时候,所报错误为:
Makefile:9:*** commands commence before first target. Stop
请问高手,我的错误出在什么地方.

没定义目标,加一行,变成下面这个样子:
dsl307:
$(CC) $(CFLAGS)

我写了一个模块,名字叫zariphix_modules_001.c,内容如下:
#include<linux/kernel.h>
#include<linux/module.h>

int init_module(){
printk("Hello World!/n");
return 0;
}

void cleanup_module(){
printk("Bye-bye!/n");
}

然后写了一个Makefile,内容如下:

CC=gcc
MODFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX
zariphix_modules_001.o: zariphix_modules_001.c /usr/include/linux/version.h
$(CC) $(MODFLAGS) -c zariphix_modules_001.c

我在make的时候提示以下错误:
Makefile:5: *** 遗漏分隔符 。 停止。
分隔符是什么呢?还有我找不到我的内核源码树在系统的哪个位置,/usr/src下面没有
我用的系统是 ubuntu 5.10

$(CC) $(MODFLAGS) -c zariphix_modules_001.c
这一行最前面要有一个 TAB,不能在第一列上,注意,是TAB, 不是空格,

运行 $ sudo make
又有了一大串错误提示:
引用:
gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -c zariphix_modules_001.c
In file included from /usr/include/linux/sched.h:16,
from /usr/include/linux/module.h:9,
from zariphix_modules_001.c:2:
/usr/include/linux/signal.h:2:2: warning: #warning "You should include <signal.h>. This time I will do it for you."
In file included from /usr/include/linux/resource.h:4,
from /usr/include/linux/sched.h:79,
from /usr/include/linux/module.h:9,
from zariphix_modules_001.c:2:
/usr/include/linux/time.h:9: 错误:‘struct timespec’ 重定义
/usr/include/linux/time.h:15: 错误:‘struct timeval’ 重定义
/usr/include/linux/time.h:20: 错误:‘struct timezone’ 重定义
/usr/include/linux/time.h:47: 错误:‘struct itimerval’ 重定义
In file included from zariphix_modules_001.c:2:
/usr/include/linux/module.h:41: 错误:字段 ‘attr’ 的类型不完全
/usr/include/linux/module.h:49: 错误:字段 ‘kobj’ 的类型不完全
zariphix_modules_001.c: 在函数 ‘init_module’ 中:
zariphix_modules_001.c:5: 警告:隐式声明函数 ‘printk’
make: *** [zariphix_modules_001.o] 错误 1
这是怎么回事呢?
解决这个问题了,原来是因为我的机器中没有内核源码树。
我下了一个新的内核源码包,编译了一下,但没有安装。再次make就通过。
可新的问题又出现了,当我用insmod加载模块的时候提示:
insmod: error inserting 'zariphix_modules_001.ko': -1 Invalid module format
郁闷。我试过了使用绝对路径和相对路径,也使用modprobe来加载,可都显示错误,这又是怎么回事呢?
也终于解决了~~~
安装了编译的内核~~就OK了

使用Initramfs挂载根文件系统,编译过程multiple target patterns(多个目标匹配)问题的解决 使用Initramfs挂载根文件系统,multiple target patterns.stop的问题及解决方案。 阅读详情

相关推荐

Make编译出错的原因及解决方法(嵌入式)

通过理解并解决这些常见的Make编译错误,可以提高嵌入式项目的编译成功率。当然,实际项目中可能会遇到其他类型的错误,但这些错误是经常出现的情况。通过仔细检查代码、检查头文件和库文件的路径、解决未定义的引用和处理重复定义等问题,可以更好地利用Make工具进行嵌入式开发中的项目编译。在嵌入式开发中,使用Make工具进行项目的编译是常见的做法。本文将介绍一些常见的Make编译错误,并提供相应的解决方法。这是最常见的Make编译错误之一。当代码中使用了未定义的函数或变量,并且没有包含相应的头文件时,编译会报错。

Orion_O的博客 3051

make 的常见错误信息zz

         make 的常见错误信息 make执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“-”、或者make使用“-k”选项执行时。make执行过程的致命错误都带有前缀字符串“***”。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“make”);另外一种是当makefile

民工之家 2483

燧原科技云燧ESL64-O超节点:国产AI芯片与OEX光互联架构解析

分布式AI训练通过将计算任务拆分到多个节点并行执行来加速模型训练,其核心原理涉及数据并行和模型并行等策略。在技术价值层面,分布式训练能显著提升大规模深度学习任务的效率,但传统GPU集群常因网络通信瓶颈导致性能受限。OEX光互联架构作为解决通信瓶颈的关键创新,采用硅光技术实现高带宽、低延迟的节点内互联,优化了AI训练中的集合操作。这种硬件级优化特别适用于千亿参数大模型训练和科学计算等场景,能有效降低AI集群的总体拥有成本(TCO)。云燧ESL64-O超节点正是基于国产自研AI芯片与OEX架构的集成方案,为大规

weixin_29071809的博客 370

chatGPT辅助解决QT构建报错error: multiple target patterns

这个错误通常是由于 Makefile 文件中的规则定义不正确导致的。在这个 Makefile 规则中,报错信息。直接打开示例,构建报错error: multiple target patterns. Stop.您需要将依赖项和命令都放在同一行,并使用冒号分隔目标文件和依赖项。只是为了指定编码格式,可以删除这一行或在命令中直接指定编码格式。请注意,我们已经更改了命令中输出文件的路径分隔符。然后,您可以重新运行 make 工具来构建您的项目。这个修改后再次编译,ok了。再也没有构建错误了。

huntenganwei的博客 2029

Unity游戏开发必备:HybridCLR热更新实战教程(含iOS/Android适配指南)

本文详细介绍了HybridCLR在Unity游戏开发中的热更新实战教程,包括iOS/Android平台适配指南。通过环境配置、项目结构规划、热更新工作流实现等步骤,帮助开发者高效掌握C#热更新技术,解决移动游戏快速迭代的痛点问题。

weixin_29011395的博客 441

永磁同步电机ADRC控制策略优化:从理论到Simulink仿真实践

本文深入探讨了永磁同步电机自抗扰控制(ADRC)策略的优化与实践。针对传统PID在动态响应、抗扰及噪声抑制方面的不足,详细解析了ADRC三大核心组件——跟踪微分器(TD)、扩张状态观测器(ESO)与非线性状态误差反馈(NLSEF)的工作原理。通过手把手的Simulink仿真教程,展示了从算法编写、模型搭建到参数整定的完整流程,并进阶实现了位置-速度双环ADRC协同控制,为高性能电机伺服系统设计提供了从理论到实践的清晰指南。

root9的博客 412

Makefile中常见的错误信息

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

小魚兒 1285

使用OpenCV进行3D重建:详细指南

3D重建是计算机视觉领域的一项关键技术,它能够从二维图像中恢复出场景的三维结构。这项技术在机器人视觉、增强现实和3D建模等多个领域都有广泛的应用。在本篇技术博客中,我们将详细介绍如何使用OpenCV这一流行的计算机视觉库来实现3D重建。我们将逐步探讨整个过程,包括相机标定、特征点提取与匹配、立体校正、深度图计算以及最终的三维重建。3D重建是一个复杂的过程,涉及多个步骤和多种算法。OpenCV提供了强大的工具来支持这一过程,从相机标定到特征点提取与匹配,再到立体校正和深度图计算,最后实现三维重建。

weixin_41544125的博客 1315

Makefile 常见的错误信息

Makefile 常见的错误信息

Android framework 748

基于DFT的滤波系列:加窗滤波的 Matlab 实现

在实际应用中,你可以尝试不同类型的窗函数(如汉宁窗、汉明窗等)以及不同的滤波参数来获得所需的滤波效果。此外,还可以进一步了解 DFT 和窗函数的原理,以及其他数字信号处理技术的应用。加窗滤波是一种常用的数字信号处理技术,它通过在频域上应用窗函数来改善信号的频谱特性。我们通过定义输入信号、应用窗函数、进行 DFT 和逆 DFT,实现了滤波过程,并通过绘图进行了可视化。在频域上进行加窗滤波的关键是将窗函数应用于 DFT 的结果。首先,我们需要定义一个输入信号,这里我们使用一个简单的正弦波作为示例。

m0_47037246的博客 462

基于Python爬虫+词云图+情感分析对某东上完美日记的用户评论分析

随着互联网和社交媒体的发展,用户评论成为了消费者表达自己意见和情感的主要途径之一。对于企业来说,深入了解用户对其产品或服务的看法可以帮助他们更好地了解市场需求、产品改进的方向,以及消费者的情感倾向。因此,对用户评论进行分析已经成为了市场研究和商业决策的重要手段之一。

m0_64336780的博客 1万+

Makefile (12)— Makefile 常见的错误信息

make执行过程中所产生错误并不都是致命的,特别是在命令行之前存在、或者make使用-k选项执行时。make 执行过程的致命错误都带有前缀字符串***。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是make另外一种是当Makefile本身存在语法错误无法被make解析并执行时,前缀包含了Makefile文件名和出现错误的行号。这类错误并不是make的真正错误。它表示make检测到make所调用的作为执行命令的程序返回一个非零状态(Error NN。

stephenbruce的博客 4739

【LDPC-7】LLR量化位宽对LDPC译码性能的影响分析——以最小和译码算法为例进行matlab仿真

最小和译码算法的步骤如下:最后译码结果如果满足或者完成所有迭代次数,则译码算法停止迭代,否则继续进行译码迭代操作。

FPGA/MATLAB学习教程/源码/项目合作开发 1471

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

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

wohu1104的专栏 1万+

YOLOv8高级应用实战:多目标跟踪+实例分割+小样本检测(工业/安防场景落地指南)

安防监控中,需要跟踪多个行人的运动轨迹,而不只是框出“这是行人”;工业质检时,要精确分割出零件的缺陷区域(像素级),而不是只给一个粗略的矩形框;罕见场景下(如特殊故障检测、稀有动物识别),只能收集到几十张样本,普通训练方法精度惨不忍睹。我在落地工业安防和质检项目时,把YOLOv8的高级功能摸了个遍,踩过“多目标跟踪遮挡丢帧”“实例分割边缘模糊”“小样本检测过拟合”等一系列坑,最终总结出这套可直接复用的实战方案。多目标跟踪(ByteTrack)、实例分割、小样本检测。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 750

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Makefile的常见错误信息

 转载:http://blog.csdn.net/wanruirui/article/details/5894780 本章是对 make 执行过程中可能出现常见错误进行汇总、分析,并给出修正的可能方法。 make 执行过程中产生的错误并不是所有都是致命的;特别在命令行之前使用“ - ”、或者使用 make 的“ -k ”选项。 m

RYP_S 的专栏 2431

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

12、Makefile 中常见的错误信息

Makefile 中常见的错误信息

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 529

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[转]Makefile的常见错误信息

<br />本章是对make执行过程中可能出现常见错误进行汇总、分析,并给出修正的可能方法。<br />make执行过程中产生的错误并不是所有都是致命的;特别在命令行之前使用“-”、或者使用make的“-k”选项。make执行过程的致命错误都带有前缀字符串“***”。<br />错误的信息都有前缀,一种是执行程序名作为错误的前缀(通常是“make”);另外一种是当Makefile本身存在错误时,前缀包含了文件名和出现错误的行号。<br />在下述的错误列表中,省略了普通的前缀:<br />[FOO] Err

专栏 1万+

错误代码 missing-method 错误原因: 缺少方法名参数_Makefile中常见的错误信息

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

weixin_29007809的博客 3406

make的常见错误信息

错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“make”);另外一种是当Makefile本身存在语法错误无法被make解析并执行时,前缀包含了makefile文件名和出现错误的行号。 在下述的错误列表中,省略了普通前缀: [FOO] Error NN [FOO] signal description 这类错误并不是make的真正错误。它表示make检测到make所调用的作为执行命令的程序返回一个非零状态(Error NN),或者此命令程序以非正常方式退出(携带某种信号)。 如果错误信息中没有附加“

u012849539的博客 9495

make的常见错误信息(总结中)

转自:http://hi.baidu.com/wangy0919/blog/item/d01ae31bbd17361b8618bf36.html make执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“-”、或者make使用“-k”选项执行时。make执行过程的致命错误都带有前缀字符串“***”。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“make”);另外一种是

Skypine_Lee的专栏 2682

GNU make中文手册-第15章: make的常见错误信息

GNU make中文手册-第15章: make的常见错误信息关键词: GNU make中文手册-第十五章 make的常见错误信息 第十五章 make的常见错误信息--------------------------

883

make 的常见错误信息

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

Heron——Linux & ARM 6055
上一篇: MATLAB 2008a (Linux) sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.9' not found 错误解决办法
下一篇: C/C++面试题
鹅鹅
博客等级 码龄19年 70粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值