我一直在试图在Windows上编译Qt,并且遇到了一个有趣的问题,其中#includes失败,包含的文件不存在(“没有这样的文件或目录”)。但是该文件确实存在。做包括的文件是自动生成的“MOC”文件(由Qt的制造)有一个包含类似如下:Visual Studio C++包括字符串最大长度
#include "../../../../../../../../qt-everywhere-opensource-src-4.8.2/examples/tools/plugandpaintplugins/extrafilters/extrafiltersplugin.h"
字符串中包含长127个字符。在构建中生成和编译了许多“moc”文件,但只有像这样长(127+个字符)的文件才会失败。
有问题的文件碰巧坐在UNIX系统上,通过Samba共享到Windows。我能够通过创建符号链接并在受影响的文件中用“qt-4.8.2”替换“qt-everywhere-opensource-src-4.8.2”来解决此问题。所产生的包括:
#include "../../../../../../../../qt-4.8.2/examples/tools/plugandpaintplugins/extrafilters/extrafiltersplugin.h"
只有102个字符,并且工作得很好。
我周围搜索,找不到任何这方面的参考。我也不能在Qt构建之外复制问题(只是制作任意长的文件名并尝试包含它们)。所以Qt创建的makefile可能会在运行cl
时做某些事情,导致它以某种方式拒绝长期包含。
有没有人有关于此的任何其他信息?
这两种情况下绝对路径的长度是多少?即解决各种../../时。在大多数旧的Windows系统中,最大路径限制为256个字符。 – TemplateRex 2012-08-15 13:08:55
本例的完整路径分别是132和106个字符。但是操作系统在打开文件时(即在记事本或cmd shell中)没有问题。 btw,我忘了提及我正在使用MSVS 2008. – 2012-08-15 14:43:48
当我无法复制问题时,我确实使用了Samba安装。根据我在网上找到的其他评论,我认为它可能是目录长度而不是文件长度,所以我做了一些非常长的假目录,但仍然没有问题。但后来我试图把源文件放在长目录中,包括../../really-long-dir/7890123...890/a.h,我得到了错误。这发生在约131个字符。但是我可以在路径中使用更少的“..”来获得更长的总路径长度。很奇怪。我想知道这是否是预处理器中的错误。 – 2012-08-15 19:57:39