2008-12-10 8 views
20

Existe-t-il un identifiant "win64" dans les fichiers de projet Qmake? Qt Qmake advanced documentation ne mentionne pas autre qu'unix/macx/win32.Identifiant pour la configuration de win64 dans Qmake

Jusqu'à présent, je l'ai essayé d'utiliser:

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

Le résultat est toujours "à l'aide win32". Dois-je utiliser un fichier de projet séparé pour les projets x32 et x64, afin qu'ils compilent avec les bibliothèques correctes? Existe-t-il un autre moyen d'identifier les environnements 32 bits et 64 bits?

Répondre

23

je le fais comme ça

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

Non, mais vous pouvez créer et utiliser un nouveau mkspec, je pense que qmake définit également un identifiant de plate-forme nommé d'après le mkspec actuel. Pourquoi avez-vous besoin de tester pour 64 bits?

Reed

+0

Je veux utiliser l'API Win32 dans Qt et je dois faire un lien avec les bibliothèques du SDK Windows. Évidemment, ces bibliothèques sont dans des répertoires différents, et j'ai donc besoin d'inclure des fichiers différents en utilisant LIBS. Peut-être que je fais tout faux? Y a-t-il une meilleure façon de le faire? – Tuminoid

+0

Spécifiquement dans Qt Open Source Edition, non commercial Qt avec intégration VS, mais à partir de la ligne de commande et via les fichiers de projet qmake. – Tuminoid

2

J'ai trouvé une façon de le faire. Qt vous permet de passer des paramètres de configuration arbitraires que vous pouvez utiliser pour séparer les cibles.

En ayant une configuration conditionnelle dans votre fichier de projet:

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

et en passant que config personnalisée à qmake avec

qmake CONFIG+=myX64 

vous obtenez le résultat recherché.

+0

Bien sûr, vous pouvez utiliser différents fichiers .pro qui comprennent les parties communes aussi, mais personnellement, je trouve que la douleur dans le ... – Tuminoid

9

MISE À JOUR: depuis très récemment, Qt a une façon de le faire de manière transparente et facilement, sans tracas manuel:

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

Source: the brand new Qt Dev FAQ

+0

Wow, j'ai été la recherche pendant des jours. Merci pour votre réponse. –

+0

Ne devrait-il pas être QMAKE_TARGET au lieu de QMAKE_HOST? – Simon

+0

@Simon ['QMAKE_TARGET'] (http://qt-project.org/doc/qt-5/qmake-variable-reference.html#qmake-target) contient le nom de la cible du projet (c'est-à-dire le fichier binaire) . 'qmake' n'a jamais été conçu pour gérer la compilation croisée où target! = host. – rubenvb

13

Depuis Qt5 vous pouvez utiliser QT_ARCH pour détecter si votre configuration est 32 ou 64. Lorsque la cible est 32 bits, cela renvoie i386 et dans le cas d'une cible 64 bits, elle a la valeur x86_64. Donc, il peut être utilisé comme:

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