Идентификатор для конфигурации win64 в Qmake
Вопрос
Есть ли идентификатор "win64" в файлах проекта Qmake? Qt Qmake продвинутый в документации не упоминается ничего, кроме unix / macx / win32.
До сих пор я пробовал использовать:
win32:message("using win32")
win64:message("using win64")
amd64:message("using amd64")
Результатом всегда является "использование win32".
Должен ли я использовать отдельный файл проекта для проектов x32 и x64, чтобы они компилировались с использованием правильных библиотек?Есть ли какой-либо другой способ определить разницу между 32-разрядной и 64-разрядной средами?
Решение
Я делаю это вот так
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
}
}
Другие советы
Начиная с Qt5, вы можете использовать QT_ARCH
чтобы определить, является ли ваша конфигурация 32-й или 64-й.Когда целевой объект является 32-разрядным, это возвращает i386
и в случае 64-разрядной цели он имеет значение x86_64
.Таким образом, его можно использовать как:
contains(QT_ARCH, i386) {
message("32-bit")
} else {
message("64-bit")
}
Обновить:с самого недавнего времени у Qt появился способ делать это прозрачно и легко, без лишних хлопот вручную:
win32-g++:contains(QMAKE_HOST.arch, x86_64):{
do something
}
Источник: совершенно новый FAQ по разработке Qt
Я придумал один способ сделать это.
Qt позволяет вам передавать произвольные параметры конфигурации, которые вы можете использовать для разделения целевых объектов.
Имея условную конфигурацию в вашем файле проекта:
CONFIG(myX64, myX64|myX32) {
LIBPATH += C:\Coding\MSSDK60A\Lib\x64
} else {
LIBPATH += C:\Coding\MSSDK60A\Lib
}
и передавая эту пользовательскую конфигурацию в qmake
с
qmake CONFIG+=myX64
вы получаете желаемый результат.
Нет, но вы можете создать и использовать новый mkspec, я думаю, qmake также определяет идентификатор платформы, названный в честь текущего mkspec.Зачем вам нужно тестировать для 64-разрядной версии?
Тростник