2008-12-10 11 views
20

Gibt es eine "win64" -Kennung in Qmake-Projektdateien? Qt Qmake advanced Dokumentation erwähnt nicht anders als unix/macx/win32.Kennung für win64-Konfiguration in Qmake

Bisher habe ich versucht, mit:

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

Das Ergebnis immer "mit win32" ist.

Muss ich eine separate Projektdatei für x32- und x64-Projekte verwenden, damit sie mit korrekten Bibliotheken kompilieren? Gibt es eine andere Möglichkeit, zwischen 32-Bit- und 64-Bit-Umgebungen zu identifizieren?

Antwort

23

Ich mache es wie dieses

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

Nein, aber Sie können eine neue mkspec erstellen und verwenden. Ich denke, qmake definiert auch eine Plattformkennung, die nach der aktuellen mkspec benannt ist. Warum müssen Sie auf 64 Bit testen?

Reed

+0

Ich möchte Win32 API in Qt verwenden und ich muss gegen Bibliotheken von Windows SDK verknüpfen. Offensichtlich befinden sich diese Bibliotheken in verschiedenen Verzeichnissen und daher muss ich verschiedene Dateien mit LIBS einbeziehen. Vielleicht mache ich alles falsch? Gibt es einen besseren Weg, es zu tun? – Tuminoid

+0

Speziell in Qt Open Source Edition, nicht kommerzielle Qt mit VS-Integration, sondern von der Kommandozeile und über qmake Projektdateien. – Tuminoid

2

Ich habe einen Weg gefunden, es zu tun.

Mit Qt können Sie beliebige Konfigurationsparameter übergeben, mit denen Sie die Ziele trennen können.

Durch eine bedingte config in der Projektdatei mit:

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

und vorbei die benutzerdefinierte config qmake mit

qmake CONFIG+=myX64 

erhalten Sie das gewünschte Ergebnis.

+0

Natürlich können Sie verschiedene .pro-Dateien verwenden, die die gemeinsamen Teile auch enthalten, aber persönlich finde ich, dass ein Schmerz in der ... – Tuminoid

9

UPDATE: seit neuestem hat Qt eine Möglichkeit, dies transparent zu tun und einfach, ohne manuellen Aufwand:

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

Quelle: the brand new Qt Dev FAQ

+0

Wow, ich habe das seit Tagen gesucht. Danke für deine Antwort. –

+0

Sollte es nicht QMAKE_TARGET anstelle von QMAKE_HOST sein? – Simon

+0

@Simon ['QMAKE_TARGET'] (http://qt-project.org/doc/qt-5/qmake-variable-reference.html#qmake-target) enthält den Namen des Projektziels (dh die Binärdatei) . 'qmake' war niemals dafür gedacht, Cross-Compilation zu bewältigen, wenn target! = host. – rubenvb

13

Seit Qt5 können Sie QT_ARCH verwenden, um festzustellen, ob Ihre Konfiguration 32 oder 64 ist. Wenn das Ziel 32-Bit ist, gibt das i386 und zurück Im Falle eines 64-Bit-Ziels hat es den Wert x86_64. So kann es wie verwendet werden:

contains(QT_ARCH, i386) { 
    message("32-bit") 
} else { 
    message("64-bit") 
}