我一直在試圖在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