Domanda

C'è un identificatore "Win64" nel file di progetto qmake? Qt Qmake avanzata documentazione non riporta altro che unix / macx / win32.

Finora ho provato ad utilizzare:

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

Il risultato è sempre "utilizzando win32".

È necessario utilizzare un progetto a file separato per progetti x32 e x64, in modo che sarebbe compilare le librerie corrette? C'è un altro modo per identificare tra gli ambienti a 32-bit e 64-bit?

È stato utile?

Soluzione

Lo faccio come questo

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

    }
}

Altri suggerimenti

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top