2008-12-10 30 views
20

Có số nhận dạng "win64" trong các tệp dự án Qmake không? Tài liệu Qt Qmake advanced không đề cập đến khác ngoài unix/macx/win32.Mã định danh cho cấu hình win64 trong Qmake

Cho đến nay tôi đã cố gắng sử dụng:

win32:message("using win32") 
win64:message("using win64") 
amd64:message("using amd64") 

Kết quả là luôn luôn "sử dụng win32".

Tôi có phải sử dụng tệp dự án riêng cho các dự án x32 và x64 không, vì vậy chúng sẽ biên dịch đối với các thư viện chính xác? Có cách nào khác để xác định giữa môi trường 32 bit và 64 bit không?

Trả lời

23

tôi làm điều đó như

win32 { 

    ## Windows common build here 

    !contains(QMAKE_TARGET.arch, x86_64) { 
     message("x86 build") 

     ## Windows x86 (32bit) specific build here 

    } else { 
     message("x86_64 build") 

     ## Windows x64 (64bit) specific build here 

    } 
} 
0

Không, nhưng bạn có thể tạo và sử dụng mkspec mới, tôi nghĩ qmake cũng định nghĩa một định danh nền tảng được đặt tên theo mkspec hiện tại. Tại sao bạn cần kiểm tra 64 bit?

Reed

+0

Tôi muốn sử dụng API Win32 trong Qt và tôi phải liên kết với các thư viện từ Windows SDK. Rõ ràng những thư viện này nằm trong các thư mục khác nhau, và do đó tôi cần bao gồm các tệp khác nhau bằng cách sử dụng LIBS. Có lẽ tôi đang làm tất cả sai? Có cách nào tốt hơn để làm điều đó không? – Tuminoid

+0

Cụ thể trong ấn bản mã nguồn mở Qt, không phải là Qt thương mại với tích hợp VS, nhưng từ dòng lệnh và thông qua các tệp dự án qmake. – Tuminoid

2

Tôi đã tìm ra một cách để thực hiện.

Qt cho phép bạn chuyển các tham số cấu hình tùy ý mà bạn có thể sử dụng để phân tách các mục tiêu.

Bởi có một cấu hình có điều kiện trong hồ sơ dự án của bạn:

CONFIG(myX64, myX64|myX32) { 
    LIBPATH += C:\Coding\MSSDK60A\Lib\x64 
} else { 
    LIBPATH += C:\Coding\MSSDK60A\Lib 
} 

và qua đó tùy chỉnh cấu hình để qmake với

qmake CONFIG+=myX64 

bạn sẽ có được kết quả mong muốn.

+0

Tất nhiên bạn có thể sử dụng các tập tin .pro khác nhau bao gồm các phần phổ biến quá, nhưng cá nhân tôi thấy rằng một nỗi đau trong ... – Tuminoid

9

CẬP NHẬT này: kể từ thời gian gần đây, Qt có một cách để làm điều này một cách minh bạch và dễ dàng, mà không rắc rối bằng tay:

win32-g++:contains(QMAKE_HOST.arch, x86_64):{ 
    do something 
} 

Nguồn: the brand new Qt Dev FAQ

+0

Wow, tôi đã tìm kiếm điều này trong nhiều ngày. Cảm ơn câu trả lời của bạn. –

+0

Không nên là QMAKE_TARGET thay vì QMAKE_HOST? – Simon

+0

@Simon ['QMAKE_TARGET'] (http://qt-project.org/doc/qt-5/qmake-variable-reference.html#qmake-target) chứa tên của mục tiêu dự án (nghĩa là tệp nhị phân) . 'qmake' không bao giờ được thiết kế để xử lý việc biên dịch chéo nơi đích! = host. – rubenvb

13

Vì Qt5 bạn có thể sử dụng QT_ARCH để phát hiện xem cấu hình của bạn là 32 hay 64. Khi mục tiêu là 32 bit, trả về i386 và trong trường hợp mục tiêu 64 bit, nó có giá trị là x86_64. Vì vậy, nó có thể được sử dụng như:

contains(QT_ARCH, i386) { 
    message("32-bit") 
} else { 
    message("64-bit") 
} 
Các vấn đề liên quan