Идентификатор конфигурации win64 в Qmake

Есть ли в файлах проекта Qmake идентификатор "win64"? В расширенной документации Qt Qmake не упоминается ничего, кроме unix / macx / win32.

До сих пор я пытался использовать:

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

Результат всегда "использует win32".

Должен ли я использовать отдельный файл проекта для проектов x32 и x64, чтобы они компилировались с правильными библиотеками? Есть ли другой способ идентификации между 32-битной и 64-битной средой?

10.12.2008 16:28:54
5 ОТВЕТОВ
РЕШЕНИЕ

Я делаю это так

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

    }
}
33
10.04.2014 19:26:58

Нет, но вы можете создать и использовать новый mkspec, я думаю, qmake также определяет идентификатор платформы, названный в честь текущего mkspec. Зачем вам нужно тестировать на 64 бит?

камыш

0
10.12.2008 19:44:24
Я хочу использовать Win32 API в Qt и я должен ссылаться на библиотеки из Windows SDK. Очевидно, что эти библиотеки находятся в разных каталогах, и поэтому мне нужно включать разные файлы, используя LIBS. Может я все делаю не так? Есть ли лучший способ сделать это?
Tuminoid 11.12.2008 06:10:22
В частности, в Qt Open Source Edition, не коммерческий Qt с интеграцией VS, но из командной строки и через файлы проекта qmake.
Tuminoid 11.12.2008 06:12:04

Я нашел один способ сделать это.

Qt позволяет вам передавать произвольные параметры конфигурации, которые вы можете использовать для разделения целей.

Имея условную конфигурацию в вашем файле проекта:

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

и передать эту пользовательскую конфигурацию qmakeс

qmake CONFIG+=myX64

Вы получите желаемый результат.

2
5.07.2011 09:54:51
Конечно, вы можете использовать разные .pro-файлы, которые также включают в себя общие части, но лично я нахожу, что боль в ...
Tuminoid 3.01.2009 17:05:32

ОБНОВЛЕНИЕ: с недавнего времени в Qt есть способ сделать это прозрачно и легко, без лишних хлопот:

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

Источник: совершенно новый Qt Dev FAQ

10
6.07.2010 12:47:01
Вау, я искал это несколько дней. Спасибо за Ваш ответ.
Violet Giraffe 5.07.2011 09:05:42
Разве это не QMAKE_TARGET вместо QMAKE_HOST?
Simon 29.07.2014 14:37:00
@Simon QMAKE_TARGETсодержит имя цели проекта (т.е. двоичный файл). qmakeникогда не был предназначен для кросс-компиляции, где target! = host.
rubenvb 29.07.2014 14:40:26
@rubenvb qmakeможет кросс-компилироваться, например, для Windows в Linux. Принятый ответ использует, QMAKE_TARGETно он не работает для меня
Simon 30.07.2014 15:22:48
@Simon - это исправленные источники Qt и mkspecs, которые позволяют это. Так что нет, qmake (без изменений) не разрешает кросс-компиляцию. Это единственная вещь qmake-and-Qt-per-target. Я не знаю, изменил ли Qt5 что-нибудь к лучшему. Просто перейдите по ссылке, QMAKE_TARGET - это не то, что вы и OP думаете. По крайней мере, если я могу поверить документации ...
rubenvb 30.07.2014 15:26:43

Начиная с Qt5, вы можете использовать, QT_ARCHчтобы определить, является ли ваша конфигурация 32 или 64. Когда цель является 32-битной, это возвращает значение, i386а в случае 64-битной цели она имеет значение x86_64. Так что это может быть использовано как:

contains(QT_ARCH, i386) {
    message("32-bit")
} else {
    message("64-bit")
}
24
9.06.2015 05:58:32