关于 Qt报错“No rule to make target xxxx 长路径”一种非常规问题定位(原因:shadow全路径+深度模块依赖相对路径超过系统预定义256字节) 的解决方法

本文讲述了在将老项目A的ffmpeg部分复制到新项目B并遇到编译错误的过程,发现问题是由于shadow编译和较长路径导致的头文件路径超限。解决方案是避免使用shadow,确保路径长度不超过256字节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136139652

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:各种问题解决(点击传送门)


问题

  老项目A工程,新项目B工程,实际环境是依赖A,所以复制了A改名为B,A的ffmpeg可以编译依赖过去,B的ffmpeg出现“mingw32-make[2]: *** No rule to make target ‘…/…/view360NoBodyRemoteCarDemo/modules/ffmpegPlayerManager/ffmpeg-3.4.2-win32-dev/include/libavcodec/avcodec.h’, needed by ‘release/main.o’. Stop.”的原因定位。
  编译错误,如下图:
  在这里插入图片描述

  在这里插入图片描述
  排除了环境因素、依赖头文件路径等常规(模块化相对部署,不会出现这些问题),下面给出定位过程,以供大家学习,遇到问题不要慌,一步一步拆解论证即可。


解决过程

  检查是否包含:
  在这里插入图片描述
  确认包含了:
  在这里插入图片描述
  其实这是从A到B项目,A可以使用,B编译就缺少头文件,路径和编译环境检查都没有问题。
  在这里插入图片描述
  新建了一个子工程playerDemo,模块ffmpegPlayManager.pri是一样的,然后子工程也是一样的,老项目A编译没问题(缓存都删了):
  在这里插入图片描述
  新项目B的playerDemo子工程编译不行:
  在这里插入图片描述
  删掉A项目的.pro.user文件和shadow,重新配置mingw32为环境,新的可以直接通过:
在这里插入图片描述
  删掉B项目的.pro.user文件和shadow,重新配置mingw32为环境,新的编译还是出错:
  在这里插入图片描述
  综合以上,真的是个目前能检查做的基本做了,未发现原因。
  对比了makefile,大小不一样:
  在这里插入图片描述

  深度比较下:
  在这里插入图片描述
  目前,得出结论,两边除了大工程的名字不一样,其他一摸一样,一个行一个不行
  是不是工程名noBody踩中了关键字,复制下,修改项目B名字为view361RemoteCarDemo(注意里面的.pro也要改,删掉环境.user):
  在这里插入图片描述
  在这里插入图片描述
  继续打开功程B”,看看,确实可以:
  所
  然后再改回来看看,(模块都是相对路径,直接移动到最外面,B‘'改名称为A’‘):
  在这里插入图片描述
  在这里插入图片描述
  打开工程:
  在这里插入图片描述
  分别编译测试,结果又是都没有问题(结论:排除了名称踩关键字的原因,理论上也不会,但是我们需要论证):
  在这里插入图片描述
  在用这个改回来名字的去替换,最原始的出问题的项目B,编译还是有问题
  在这里插入图片描述
  不得不怀疑是否是文件路径太长了超过256个字符导致的?发现并不长:(这是关键因素的开始)
  在这里插入图片描述
  是否是shadow之后长了?这个论证很简单,直接改为去掉shadow编译:
  在这里插入图片描述
  基本得出结论了,确实就是shadow编译加起来整个路径太长了导致的,检查也不是很长,为了进一步确认,我们直接改下shadow的文件夹,改短点:
  在这里插入图片描述
  改短后,编译通过:
  在这里插入图片描述
  按照原理来说,windows不超过256字节就可以了,应该是shadow的全路径+ffmpge的include的相对路径超过了256字节,所以编译时候的环境就定位不到这个,单独的路径又能定位到(正好ffmpge模块的名称有点长)。


结论

  windows不超过256字节就可以了,应该是shadow的全路径+ffmpge的include的相对路径超过了256字节,所以编译时候的环境就定位不到这个,单独的路径又能定位到(正好ffmpge模块的名称有点长)。


解决方法

  下次注意,本次不使用shadow编译,项目B暂不改名称,不影响其他人开发。


本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136139652

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(技术Q群4597637)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值