Идентификатор конфигурации 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-битной средами?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
33
0
26 177
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Рид

Я хочу использовать Win32 API в Qt и должен связываться с библиотеками из Windows SDK. Очевидно, что эти библиотеки находятся в разных каталогах, и поэтому мне нужно включить разные файлы с помощью LIBS. Может я все не так делаю? Есть ли способ лучше?

Tuminoid 11.12.2008 09:10

В частности, в Qt Open Source Edition, не коммерческом Qt с интеграцией VS, а из командной строки и через файлы проекта qmake.

Tuminoid 11.12.2008 09:12

Я придумал один способ сделать это.

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

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

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

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

qmake CONFIG+=myX64

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

Конечно, вы можете использовать разные файлы .pro, которые также включают общие части, но лично я считаю, что ...

Tuminoid 03.01.2009 20:05
Ответ принят как подходящий

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

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

Вау, я искал это несколько дней. Спасибо за Ваш ответ.

Violet Giraffe 05.07.2011 13:05

Разве это не должно быть QMAKE_TARGET вместо QMAKE_HOST?

Simon 29.07.2014 18:37

@Simon QMAKE_TARGET содержит имя цели проекта (то есть двоичного файла). qmake никогда не предназначался для кросс-компиляции, где target! = Host.

rubenvb 29.07.2014 18:40

@rubenvb qmake может выполнять кросс-компиляцию, например для Windows в Linux. В принятом ответе используется QMAKE_TARGET, но у меня он не работает

Simon 30.07.2014 19:22

@Simon - это пропатченные исходники Qt и mkspecs, которые это позволяют. Так что нет, qmake (без изменений) не допускает кросс-компиляцию. Это единый qmake-and-Qt-per-target. Не знаю, изменил ли Qt5 что-нибудь к лучшему. Просто перейдите по ссылке, QMAKE_TARGET - это не то, что вы и OP думаете. По крайней мере, если я могу верить документации ...

rubenvb 30.07.2014 19:26

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

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

Другие вопросы по теме