Есть ли в файлах проекта Qmake идентификатор win64? В документации Qt Qmake расширенный не упоминается, кроме unix / macx / win32.
Пока что я пробовал использовать:
win32:message("using win32")
win64:message("using win64")
amd64:message("using amd64")
Результат всегда "с использованием win32".
Должен ли я использовать отдельный файл проекта для проектов x32 и x64, чтобы они компилировались с правильными библиотеками? Есть ли другой способ определить между 32-битной и 64-битной средами?





Нет, но вы можете создать и использовать новый mkspec, я думаю, что qmake также определяет идентификатор платформы, названный в честь текущего mkspec. Зачем вам тестировать на 64 бит?
Рид
В частности, в Qt Open Source Edition, не коммерческом Qt с интеграцией VS, а из командной строки и через файлы проекта qmake.
Я придумал один способ сделать это.
Qt позволяет вам передавать произвольные параметры конфигурации, которые вы можете использовать для разделения целей.
Имея условную конфигурацию в файле проекта:
CONFIG(myX64, myX64|myX32) {
LIBPATH += C:\Coding\MSSDK60A\Lib\x64
} else {
LIBPATH += C:\Coding\MSSDK60A\Lib
}
и передать эту настраиваемую конфигурацию в qmake с помощью
qmake CONFIG+=myX64
вы получите желаемый результат.
Конечно, вы можете использовать разные файлы .pro, которые также включают общие части, но лично я считаю, что ...
Я делаю это так
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
}
}
ОБНОВЛЕНИЕ: с недавнего времени в Qt есть способ сделать это прозрачно и легко, без ручных хлопот:
win32-g++:contains(QMAKE_HOST.arch, x86_64):{
do something
}
Источник: новый FAQ по Qt Dev
Вау, я искал это несколько дней. Спасибо за Ваш ответ.
Разве это не должно быть QMAKE_TARGET вместо QMAKE_HOST?
@Simon QMAKE_TARGET содержит имя цели проекта (то есть двоичного файла). qmake никогда не предназначался для кросс-компиляции, где target! = Host.
@rubenvb qmake может выполнять кросс-компиляцию, например для Windows в Linux. В принятом ответе используется QMAKE_TARGET, но у меня он не работает
@Simon - это пропатченные исходники Qt и mkspecs, которые это позволяют. Так что нет, qmake (без изменений) не допускает кросс-компиляцию. Это единый qmake-and-Qt-per-target. Не знаю, изменил ли Qt5 что-нибудь к лучшему. Просто перейдите по ссылке, QMAKE_TARGET - это не то, что вы и OP думаете. По крайней мере, если я могу верить документации ...
Начиная с Qt5, вы можете использовать QT_ARCH, чтобы определить, какая у вас конфигурация - 32 или 64. Когда цель - 32-битная, это возвращает i386, а в случае 64-битной цели она имеет значение x86_64. Таким образом, его можно использовать как:
contains(QT_ARCH, i386) {
message("32-bit")
} else {
message("64-bit")
}
Я хочу использовать Win32 API в Qt и должен связываться с библиотеками из Windows SDK. Очевидно, что эти библиотеки находятся в разных каталогах, и поэтому мне нужно включить разные файлы с помощью LIBS. Может я все не так делаю? Есть ли способ лучше?