2013-02-24 11 views
8

Trong qt 4.8 Tôi đã sử dụng tăng (1.52) Tất cả đều ổn ... Bây giờ tôi cố gắng chuyển sang QT5 và gặp lỗi if.hpp: Macro argument mismatch trên dòng 131 BOOST_MPL_AUX_NA_SPEC(3, if_). Trong một số QT forums có được trình bày một giải pháp như thế này:Di chuyển QT5 và Tăng: if.hpp: Đối số macro lỗi không khớp

#ifndef Q_MOC_RUN 
// All boost includes 
#endif // Q_MOC_RUN 

trong mỗi tập tin của tôi có sử dụng tăng ... Vì vậy, câu hỏi ở đây là - làm thế nào để nói rằng để thúc đẩy QT chưa sẵn sàng cho BOOST_MPL_AUX_NA_SPEC và tăng đó sẽ sử dụng một số cú pháp tiền xử lý nguyên thủy hơn sẽ tương thích với QT5?


Cập nhật: tìm thấy this solution nhưng nó có vẻ như không mang lại bất kỳ tác dụng ở tất cả trong Qt5 = (

Trả lời

6

Đây là giải pháp tốt nhất mà tôi có thể tìm thấy sau khi quét lưới trong vài giờ. Đó là cơ bản những gì người khác đã nói, nhưng với một vài làm rõ.

  • Vấn đề phải làm với moc.exe không xử lý chính xác các macro tăng cường.
  • Để giải quyết vấn đề này, chúng tôi vô hiệu hóa việc bao gồm tiêu đề Tăng cường bằng cách xác định bao gồm các bảo vệ của họ cho quá trình moc.exe, nhưng không phải để biên soạn nguồn thông thường.
  • Điều này có thể được thực hiện một cách dễ dàng nhất bằng cách thêm đoạn mã sau vào tập tin dự án của bạn (ví dụ myproject.pro):

    # ensure QMAKE_MOC contains the moc executable path 
    load(moc) 
    
    # for each Boost header you include... 
    QMAKE_MOC += -DBOOST_INCLUDE_GUARD_GOES_HERE 
    

Ví dụ, nếu tôi muốn sử dụng thư viện khai thác gỗ, Tôi d có:

#include <boost/log/trivial.hpp> 

Nếu tôi mở tệp tiêu đề, tôi có thể thấy ở trên cùng mà trình bảo vệ bao gồm có tên BOOST_LOG_TRIVIAL_HPP_INCLUDED_. Do đó, dòng tương ứng trong file .pro sẽ đọc:

QMAKE_MOC += -DBOOST_LOG_TRIVIAL_HPP_INCLUDED_ 

Một vài ghi chú hơn trong trường hợp họ có liên quan cho bất cứ ai:

  • Nếu bạn tìm thấy điều này không làm việc, hãy chắc chắn để chạy qmake và xây dựng lại dự án của bạn bất cứ khi nào bạn thêm một dòng mới vào tệp dự án của bạn.
  • Tôi đang sử dụng Boost 1.53 với Qt 5.0.1 và xây dựng cho MSVC2010 trong QtCreator trên Windows 7 32-bit.
+0

bạn không thể thêm '-DBOOST_MPL_IF_HPP_INCLUDED' để chỉ loại trừ tệp vi phạm? –

+0

Cảm ơn, điều này hoạt động tốt (MSVM2012, Qt5.1.1, Boost 1.55.0) – Marc

+0

Đây là giải pháp tốt nhất của hai được trình bày ở đây cho mục đích của tôi. Chúc mừng OP. – sjwarner

3

tôi đã phải vật lộn với vấn đề tương tự và thấy rằng khi tôi loại bỏ các định nghĩa của _MSC_VER=1700 từ phong tục xây dựng lệnh cho moc rằng cảnh báo đi xa đối với tôi.

Tôi đã có thể xóa điều này khỏi tất cả các bước tạo bản dựng tùy chỉnh bằng cách ghi đè biến qmake.conf QMAKE_COMPILER_DEFINES. Tôi đang sử dụng tệp .pro để tạo tệp .vcxproj và biên dịch dự án của tôi bằng Visual Studio 2012 (Here là cách tạo tệp .vcproj/.vcxproj từ tệp .pro).

Trong tập tin qmake.conf gắn liền với win32-msvc2012 biến này là như sau:

QMAKE_COMPILER_DEFINES += _MSC_VER=1700 _WIN32 

Trong file .pro của tôi, tôi gạt nó với điều này:

QMAKE_COMPILER_DEFINES = _WIN32 

Sau đó, tôi tái sinh các Tệp .vcxproj và tệp được biên dịch không có cảnh báo đối số macro không khớp.

Tôi đang sử dụng VS 2012, tăng 1.51 và qt 5.1.2 (được biên soạn từ [email protected]: qt/qt5.git).

Hy vọng điều này cũng phù hợp với bạn.