2008-12-10 17 views
20

¿Hay un identificador "win64" en los archivos del proyecto Qmake? Qt Qmake advanced documentación no menciona más que unix/macx/win32.Identificador para la configuración win64 en Qmake

Hasta ahora he intentado usar:

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

el resultado es siempre "utilizando win32".

¿Debo usar un archivo de proyecto separado para proyectos x32 y x64, para que compilen contra las bibliotecas correctas? ¿Hay alguna otra forma de identificar entre entornos de 32 bits y de 64 bits?

Respuesta

23

que hacerlo de esta manera

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

No, pero puede crear y usar una nueva mkspec, creo qmake también define un identificador de plataforma con el nombre de la mkspec actual. ¿Por qué necesitas probar 64 bits?

Reed

+0

Quiero utilizar Win32 API en Qt y debo vincularme con las bibliotecas desde Windows SDK. Obviamente esas bibliotecas están en directorios diferentes, y por lo tanto necesito incluir diferentes archivos usando LIBS. Tal vez estoy haciendo todo mal? Hay una mejor manera de hacerlo? – Tuminoid

+0

Específicamente en Qt Open Source Edition, no Qt comercial con integración VS, sino desde la línea de comandos y vía archivos de proyecto qmake. – Tuminoid

2

que he descubierto una manera de hacerlo.

Qt le permite pasar parámetros de configuración arbitrarios que puede usar para separar los objetivos.

Al tener una configuración condicional en el archivo de proyecto:

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

y de paso, que la costumbre de configuración a qmake con

qmake CONFIG+=myX64 

obtener el resultado deseado.

+0

Por supuesto, puede utilizar diferentes archivos .pro que también incluyen las partes comunes, pero personalmente encuentro que un dolor en el ... – Tuminoid

9

ACTUALIZACIÓN: desde hace muy poco tiempo, Qt tiene una manera de hacer esto de forma transparente y sencilla, sin complicaciones Manual:

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

Fuente: the brand new Qt Dev FAQ

+0

Wow, he estado buscando esto por días. Gracias por tu respuesta. –

+0

¿No debería ser QMAKE_TARGET en lugar de QMAKE_HOST? – Simon

+0

@Simon ['QMAKE_TARGET'] (http://qt-project.org/doc/qt-5/qmake-variable-reference.html#qmake-target) contiene el nombre del objetivo del proyecto (es decir, el archivo binario) . 'qmake' nunca fue diseñado para manejar la compilación cruzada donde target! = host. – rubenvb

13

Desde Qt5 puede usar QT_ARCH para detectar si su configuración es 32 o 64. Cuando el objetivo es de 32 bits, devuelve i386 y en el caso de un objetivo de 64 bits, tiene el valor x86_64. Por lo tanto, se puede utilizar como:

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