Tôi đã cố gắng biên dịch Qt trên Windows và tôi đã gặp phải một vấn đề thú vị với #includes không có lỗi mà tệp được bao gồm không tồn tại ("Không có tệp nào hoặc danh mục"). Tuy nhiên tập tin không tồn tại. Các tập tin làm bao gồm là các tập tin tự động tạo ra "moc" (do Qt) có một bao gồm như sau:Visual Studio C++ bao gồm chuỗi dài tối đa
#include "../../../../../../../../qt-everywhere-opensource-src-4.8.2/examples/tools/plugandpaintplugins/extrafilters/extrafiltersplugin.h"
các chuỗi trong đó bao gồm có chiều dài 127 ký tự. Có rất nhiều tệp "moc" được tạo và biên dịch trong bản dựng, nhưng chỉ những tệp có độ dài rất dài như thế này (127 ký tự) không thành công.
Các tệp đang đề cập đến xảy ra khi đang ngồi trên hệ thống UNIX, được chia sẻ qua Samba với Windows. Tôi đã có thể giải quyết vấn đề bằng cách tạo một liên kết tượng trưng và thay thế "qt-everywhere-opensource-src-4.8.2" bằng "qt-4.8.2" trong các tệp bị ảnh hưởng. Kết quả bao gồm:
#include "../../../../../../../../qt-4.8.2/examples/tools/plugandpaintplugins/extrafilters/extrafiltersplugin.h"
chỉ dài 102 ký tự và làm việc tốt.
Tôi đã tìm kiếm xung quanh và không thể tìm thấy bất kỳ tham chiếu nào về điều này. Tôi cũng không thể sao chép vấn đề bên ngoài bản xây dựng Qt này (chỉ cần tạo các tên tệp dài tùy ý và cố gắng đưa chúng vào). Vì vậy, có thể bằng cách nào đó các makefiles nmake
mà Qt tạo ra đang làm một cái gì đó khi chúng chạy cl
làm cho nó từ chối lâu bao gồm một cách nào đó.
Có ai có bất kỳ thông tin bổ sung nào về điều này không?
chiều dài của đường dẫn tuyệt đối trong cả hai trường hợp là bao nhiêu? tức là khi giải quyết sự khác biệt ../../. Có giới hạn đường dẫn tối đa là 256 ký tự trên hầu hết các hệ thống cửa sổ cũ. – TemplateRex
Đường dẫn đầy đủ cho ví dụ này là 132 và 106 ký tự, tương ứng. Nhưng hệ điều hành không gặp sự cố khi mở tệp (ví dụ: trong Notepad hoặc trình bao cmd). btw, tôi quên đề cập đến tôi đang sử dụng MSVS 2008. –
Tôi đã sử dụng gắn kết Samba khi tôi không thể tái tạo sự cố. Dựa trên một số ý kiến khác tôi tìm thấy trực tuyến Tôi nghĩ rằng nó có thể là chiều dài thư mục không phải là chiều dài tập tin, vì vậy tôi đã thực hiện một số thư mục giả thực sự dài, nhưng vẫn không có vấn đề. Nhưng sau đó tôi đã thử đưa tập tin nguồn vào thư mục dài và bao gồm ../../really-long-dir/7890123...890/a.h và tôi đã nhận được lỗi. Điều đó xảy ra với khoảng 131 ký tự. Nhưng tôi có thể có tổng chiều dài đường dẫn dài hơn với ít ".." trong đường dẫn. Rất kì lạ. Tôi tự hỏi nếu đây là một lỗi trong preprocessor. –