2009-07-29 28 views
6

Gần đây tôi đã cài đặt VS Addin từ Phần mềm Qt và tôi đã nhập dự án .pro của mình vào VS2008. Nói chung, tất cả các công trình tốt, với một ngoại lệ nhỏ nhưng khó chịu.Qt4 trong Visual Studio 2008 - các tệp moc-ed bị loại trừ khỏi bản dựng?

Giả sử tôi có tệp.cpp với lớp có khai báo rằng đó là Q_OBJECT. Vì vậy, như vậy các tập tin là MOC-ed và moc_file.cpp được tạo ra, và có sẵn trong giải pháp dưới "Generated files". Càng xa càng tốt.

Điều thú vị là, khi tôi thay đổi thứ gì đó trong file.cpp (thêm một dòng, ví dụ) và lưu tệp bằng cách sử dụng Ctrl + S, moc_file.cpp sẽ bị loại trừ khỏi bản dựng (bạn có thể thấy không có mục nhập nào ký vào biểu tượng). Và tôi nhấn rất nhiều lỗi liên kết điển hình khi tôi nhấn F7 để xây dựng một giải pháp. Để khắc phục tình trạng này, tôi cần phải đi đến các thuộc tính của moc_file.cpp và thay đổi "Loại trừ khỏi xây dựng" từ "Có" thành "Không". Sau đó, mọi thứ hoạt động tốt.

Người khác có giống nhau không? Tôi có làm điều gì sai?

+0

Bạn có VS Addin mới nhất không? Các dự án của bạn có được xem là "dự án Qt" của VS không? – rpg

Trả lời

7

Sự cố được giải quyết. Tôi phát hiện ra rằng trong tôi hand-crafted tập tin .pro mô tả dự án của tôi, tôi đã MOC_DIR quy định như:

MOC_DIR = .moc

Sau khi nhập vào Visual Studio thư mục cho "file tạo" là tương tự cho cả Bản phát hành và Gỡ lỗi. Vì vậy, khi cấu hình hoạt động của tôi là Debug chẳng hạn, khi tôi lưu một tệp, nó đã bị loại trừ khỏi quá trình xây dựng vì nó rất hợp lý đối với tệp có liên quan đến Bản phát hành - như rpg và Andrew đã đề xuất. Sau khi thay đổi thư mục thành .moc \ $ (ConfigurationName), sự cố không còn thấy (và tôi thấy 2 phiên bản của mỗi tệp được tạo trong giải pháp của tôi - một cho mỗi cấu hình).

Cảm ơn sự giúp đỡ của mọi người!

+0

Tôi chạy vào cùng một vấn đề khi nhập một .pro trong VS 2008 và thực sự, một số thư mục "được tạo" bị thiếu phần $ (ConfigurationName). Tái bút: Bạn nên chấp nhận câu trả lời của riêng bạn để câu hỏi này sẽ không hiển thị trong phần chưa được trả lời. ;-) – rpg

+0

Đã tăng số phiếu bầu vì tôi gặp phải vấn đề tương tự và điều này dường như đánh dấu nó trên đầu. – OverTheEdge

0

Có, tôi sử dụng VS Addin mới nhất và dự án của tôi được xem chính xác là Dự án Qt.

0

bạn đã đặt cấu hình của mình đúng chưa?

mở cửa sổ "Debug Cấu hình Settings" Đặt các mục sau đây như được nêu dưới đây:

  • "Xây dựng dòng lệnh" qmake -project & qmake & nmake debug
  • "lệnh sạch" nmake debug- sạch
  • "Rebuild dòng lệnh" qmake & nmake debug

Lặp lại tương tự với cấu hình phát hành

0

Tôi đã thấy loại trừ khỏi hành vi xây dựng trong VS2008 (VS 2003), nhưng dự án xây dựng chính xác. Khi bạn thay đổi một tập tin moc'able, Qt sẽ phải tạo lại tập tin moc'ed vì nó đã lỗi thời.

Tôi nghi ngờ rằng thuật toán Qt là một cái gì đó như:

  • phát hiện tập tin được thay đổi
  • thiết lập các tập tin moc cũ như loại trừ khỏi build
  • thêm một tập tin mới cho dự án có cùng tên và bao gồm nó trong xây dựng

Nhìn vào dự án VS 2003 của tôi, tôi có thể thấy một số tệp moc_ * được bao gồm hai lần trong dự án, một phiên bản được đặt là bị loại trừ khỏi bản dựng và cô ấy thì không.

0

Tái tạo .vsproj tệp bằng qmake có thể khắc phục được sự cố.

Đối với mọi tệp QObject bạn có, plugin QT tạo tệp moc_ cho mọi cấu hình xây dựng (thường chỉ là Gỡ lỗi và Phát hành). Khi bạn thay đổi cấu hình hiện tại, bạn có thể thấy các dấu hiệu Không có mục nhập từ tệp này sang tệp khác.
Tệp moc_ không được thay đổi khi bạn thay đổi tệp .cpp. chỉ khi bạn thay đổi tệp .h ..Tất cả điều này dẫn tôi đến điều rằng cái gì sai xảy ra với cấu hình của bạn và thực sự là cách tốt nhất để sửa chữa nó là để tái tạo nó với qmake sử dụng một cái gì đó như thế này:

qmake -spec win32-msvc2008 
1

Thực ra, tôi đã tìm thấy các giải pháp cho điều đó " đặc tính". Bạn phải thêm BOTH files từ GeneratedFiles \ Debug và GeneratedFiles \ Debug (hoặc từ các thư mục cấu hình khác). Qt sẽ loại trừ việc xây dựng mọi thứ không thuộc loại xây dựng hiện được chọn.

Các vấn đề liên quan