Pregunta

¿Hay un identificador "Win64" en los archivos de proyecto QMake? Qt Qmake avanzó documentación no menciona que no sea UNIX / macx / win32.

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 proyecto de archivo separado para proyectos x32 y x64, por lo que iba a compilarse contra las bibliotecas correctas? ¿Hay alguna otra manera de identificar entre los entornos de 32 bits y 64 bits?

¿Fue útil?

Solución

Lo hago como esto

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

    }
}

Otros consejos

Since Qt5 you can use QT_ARCH to detect whether your configuration is 32 or 64. When the target is 32-bit, that returns i386 and in case of a 64-bit target it has the value of x86_64. So it can be used like:

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

UPDATE: since very recently, Qt has a way of doing this transparently and easily, without manual hassle:

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

Source: the brand new Qt Dev FAQ

I've figured out one way to do it.

Qt allows you to pass arbitrary config parameters which you can use to separate the targets.

By having a conditional config in your project file:

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

and passing that custom config to qmake with

qmake CONFIG+=myX64

you get the wanted result.

No, but you can create and use a new mkspec, I think qmake also defines a platform identifier named after the current mkspec. Why do you need to test for 64 bit?

Reed

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top