He estado tratando de compilar Qt en Windows y me he encontrado con un problema interesante # incluye en su defecto con el error de que el archivo está incluido no existe ("No existe el fichero o directorio"). Sin embargo, el archivo existe. Los archivos que hacen el incluyendo archivos son generados automáticamente "moc" (hechas por Qt) que tienen un include como la siguiente:Visual Studio C++ incluye cadena de longitud máxima
#include "../../../../../../../../qt-everywhere-opensource-src-4.8.2/examples/tools/plugandpaintplugins/extrafilters/extrafiltersplugin.h"
la cadena en que incluyen es de 127 caracteres de longitud. Hay muchos archivos "moc" producidos y compilados en la compilación, pero solo fallan los que tienen longitudes muy largas como esta (más de 127 caracteres).
Los archivos en cuestión resultan ser sentado en un sistema UNIX, compartida a través de Samba a Windows. Pude solucionar el problema creando un enlace simbólico y reemplazando "qt-everywhere-opensource-src-4.8.2" con "qt-4.8.2" en los archivos afectados. El resultantes incluyen:
#include "../../../../../../../../qt-4.8.2/examples/tools/plugandpaintplugins/extrafilters/extrafiltersplugin.h"
es sólo 102 caracteres de longitud y funciona muy bien.
He buscado y no he podido encontrar ninguna referencia al respecto. Tampoco podría replicar el problema fuera de esta compilación de Qt (simplemente haciendo nombres de archivo arbitrariamente largos e intentando incluirlos). Por lo tanto, es posible que de alguna manera los makefiles nmake
que crea Qt estén haciendo algo cuando ejecutan cl
que provocan que rechace largo, incluye de alguna manera.
¿Alguien tiene información adicional sobre esto?
¿cuál es la longitud de la ruta absoluta en ambos casos? es decir, al resolver los diversos ../../. Hay un límite de ruta máximo de 256 caracteres en la mayoría de los sistemas de Windows antiguos. – TemplateRex
La ruta completa para este ejemplo es de 132 y 106 caracteres, respectivamente. Pero el sistema operativo no tiene problemas para abrir el archivo (es decir, en el Bloc de notas o en el shell de cmd). por cierto, olvidé mencionar que estoy usando MSVS 2008. –
Utilicé una montura Samba cuando no pude replicar el problema. Basado en algunos otros comentarios que encontré en línea, pensé que podría ser la longitud del directorio y no la longitud del archivo, así que hice algunos directorios falsos realmente largos, pero aún así no hay problema. Pero luego intenté poner el archivo fuente en el directorio largo e incluyendo ... /../really-long-dir/7890123...890/a.h y obtuve el error. Eso sucede hasta aproximadamente 131 caracteres. Pero puedo tener longitudes de camino total más largas con menos ".." en la ruta. Muy raro. Me pregunto si esto es un error en el preprocesador. –