Pergunta

Existe um identificador "win64" em arquivos de projeto QMake? Qt Qmake avançado documentação não menciona que não unix / macx / win32.

Até agora eu tentei usar:

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

O resultado é sempre "usando win32".

Eu devo usar um arquivo de projeto separado para projetos x32 e x64, então eles seria compilar contra bibliotecas corretas? Existe alguma outra maneira de identificar entre ambientes de 32 bits e 64 bits?

Foi útil?

Solução

Eu faço isso como este

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

    }
}

Outras dicas

Desde Qt5 você pode usar QT_ARCH para detectar se sua configuração é 32 ou 64. Quando o alvo é de 32 bits, que retorna i386 e em caso de um alvo 64-bit tem o valor de x86_64. Então, ele pode ser usado como:

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

UPDATE: desde muito recentemente, Qt tem uma maneira de fazer isso de forma transparente e facilmente, sem problemas manual:

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

Fonte: a nova marca Qt Dev FAQ

Eu descobri uma maneira de fazê-lo.

Qt permite passar parâmetros de configuração arbitrários que você pode usar para separar os alvos.

Por ter uma configuração condicional em seu arquivo de projeto:

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

e passando esse costume config para qmake com

qmake CONFIG+=myX64

você obter o resultado desejado.

Não, mas você pode criar e usar uma nova mkspec, acho qmake também define um identificador de plataforma nomeado após o mkspec atual. Por que você precisa de teste para 64 bits?

Reed

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top