Ho cercato di compilare Qt su Windows e ho riscontrato un problema interessante con #include in mancanza dell'errore che il file da includere non esiste ("Nessun file di questo tipo o directory "). Tuttavia il file esiste. I file che fanno il inclusi sono file generati automaticamente "moc" (realizzati da Qt) che hanno un include come la seguente:Visual Studio C++ include lunghezza massima della stringa
#include "../../../../../../../../qt-everywhere-opensource-src-4.8.2/examples/tools/plugandpaintplugins/extrafilters/extrafiltersplugin.h"
la stringa che includono una lunghezza di 127 caratteri. Ci sono molti file "moc" prodotti e compilati nella build, ma solo quelli con lunghezze molto lunghe come questa (127+ caratteri) falliscono.
I file in questione si trovano su un sistema UNIX, condivisi tramite Samba su Windows. Sono stato in grado di risolvere il problema creando un collegamento simbolico e sostituendo "qt-everywhere-opensource-src-4.8.2" con "qt-4.8.2" nei file interessati. Il derivano sono:
#include "../../../../../../../../qt-4.8.2/examples/tools/plugandpaintplugins/extrafilters/extrafiltersplugin.h"
è lunga solo 102 caratteri e funziona bene.
Ho cercato in giro e non ho trovato alcun riferimento a questo. Né potrei replicare il problema al di fuori di questa build Qt (semplicemente facendo nomi di file arbitrariamente lunghi e cercando di includerli). Quindi è possibile che in qualche modo i makefile nmake
creati da Qt stiano facendo qualcosa quando eseguono cl
che lo fa rifiutare in un modo lungo gli include.
Qualcuno ha ulteriori informazioni su questo?
qual è la lunghezza del percorso assoluto in entrambi i casi? cioè quando si risolvono i vari ../../. C'è un limite di percorso massimo di 256 caratteri sulla maggior parte dei vecchi sistemi Windows. – TemplateRex
Il percorso completo per questo esempio è di 132 e 106 caratteri, rispettivamente. Ma il sistema operativo non ha problemi ad aprire il file (ad esempio, nel blocco note o nella shell cmd). btw, Ho dimenticato di menzionare che sto usando MSVS 2008. –
Ho usato una montatura Samba quando non sono riuscito a replicare il problema. Sulla base di alcuni altri commenti che ho trovato online ho pensato che potrebbe essere la lunghezza della directory e non la lunghezza del file, quindi ho creato alcune directory finte davvero lunghe, ma ancora nessun problema. Ma poi ho provato a mettere il file sorgente nella lunga directory e includendo ../../really-long-dir/7890123...890/a.h e ho ricevuto l'errore. Ciò accade fino a circa 131 caratteri. Ma posso avere lunghezze di percorso totali più lunghe con meno ".." nel percorso. Molto strano. Mi chiedo se questo è un bug nel preprocessore. –