Как указать, какую версию Windows SDK будет использовать qmake?

На моем ПК установлена ​​версия Visual Studio 2017 Community. Недавно я установил Qt5.10.1. Я создал проект VS из одного из примеров файлов .pro:

qmake -tp vc cube.pro

Однако, когда я открываю этот проект VS и создаю его, я получаю сообщение об ошибке:

Windows SDK версии 8.1 не найден. Установите требуемую версию Windows SDK или измените версию SDK на страницах свойств проекта или щелкнув решение правой кнопкой мыши и выбрав «Перенастроить решение».

Как указать раз и навсегда, что qmake должен ориентироваться на Windows SDK 10.0 вместо 8.1, чтобы мне не приходилось вручную перенастраивать каждый раз, когда я создаю проект VS с помощью qmake?


person Andy    schedule 04.03.2018    source источник
comment
Конкретная версия Qt нацелена на конкретный Windows SDK. qmake просто отражает это. Создайте копию Qt для нужного вам SDK, и его qmake будет ссылаться на него. qmake выбирает именно ту сборку Qt, которая вам нужна, со всеми ее зависимостями. т.е. для сборки для определенного Qt вы используете его qmake при инициализации папки сборки.   -  person Kuba hasn't forgotten Monica    schedule 05.03.2018
comment
Я запустил установщик qt-unified-windows-x86-3.0.2-online и выбрал MSVC 2017. Поэтому я подумал, что сгенерированный qmake проект должен работать из коробки. Я также заметил, что в командном окне Qt написано: Настройка среды для использования Qt... Не забудьте вызвать vcvarsall.bat для завершения настройки среды! Это несмотря на то, что скрипт vcvars.bat 2017 года находится в моей переменной PATH. Кажется, что-то не так с установщиком? Может 2017 все-таки не поддерживается? Я заметил, что в каталоге Qt/vcredist есть редисты 2015 года, но не 2017 года.   -  person Andy    schedule 05.03.2018


Ответы (2)


Вы не можете выбрать версию Windows SDK из qmake. qmake ожидает, что среда правильно настроена перед запуском.

Если вы используете командную строку напрямую, вы увидите следующее сообщение: Remember to call vcvarsall.bat to complete environment setup!. Это означает, что вам нужно запустить vcvarsall.bat с правильными параметрами для настройки цепочки инструментов MSVC, включая выбранную вами версию Windows SDK.

Некоторые примеры:

# MSVC 2017 for 64 bit 
vcvarsall.bat amd64
# MSVC 2017 for 64 bit using Windows 8.1 SDK
vcvarsall.bat amd64 8.1
# MSVC 2017 for 64 bit using Windows 10 SDK version 10.0.10240.0
vcvarsall.bat amd64 10.0.10240.0
# MSVC 2015 (installed with 2017 installer) for 64 bit using Windows 10 SDK version 10.0.10240.0
vcvarsall.bat amd64 10.0.10240.0 -vcvars_ver=14.0

И справочное сообщение от vcvarsall.bat:

Syntax:
    vcvarsall.bat [arch] [platform_type] [winsdk_version] [-vcvars_ver=vc_version]
where :
    [arch]: x86 | amd64 | x86_amd64 | x86_arm | x86_arm64 | amd64_x86 | amd64_arm | amd64_arm64
    [platform_type]: {empty} | store | uwp
    [winsdk_version] : full Windows 10 SDK number (e.g. 10.0.10240.0) or "8.1" to use the Windows 8.1 SDK.
    [vc_version] : {none} for default VS 2017 VC++ compiler toolset |
                   "14.0" for VC++ 2015 Compiler Toolset |
                   "14.1x" for the latest 14.1x.yyyyy toolset installed (e.g. "14.11") |
                   "14.1x.yyyyy" for a specific full version number (e.g. 14.11.25503)

The store parameter sets environment variables to support Universal Windows Platform application
development and is an alias for 'uwp'.

For example:
    vcvarsall.bat x86_amd64
    vcvarsall.bat x86_amd64 10.0.10240.0
    vcvarsall.bat x86_arm uwp 10.0.10240.0
    vcvarsall.bat x86_arm onecore 10.0.10240.0 -vcvars_ver=14.0
    vcvarsall.bat x64 8.1
    vcvarsall.bat x64 store 8.1

Если вы используете Qt Creator, вам не повезло. Qt Creator просто обнаруживает установленные цепочки инструментов MSVC, но не предоставляет никаких средств для добавления параметров к вызову vcvarsall.bat или для добавления цепочки инструментов MSVC вручную.

person Benjamin T    schedule 05.03.2018
comment
Итак, я запустил: C:\Qt\Examples\Qt-5.10.1\opengl\cube›C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat amd64 10.0 .16299.0 Затем следует qmake -tp vc cube.pro. Однако полученный проект VS по-прежнему имеет версию 8.1 в качестве версии Windows SDK. - person Andy; 05.03.2018
comment
Также я указал VS2017 x64 при установке Qt, так почему окно команд Qt не запускает этот файл vcvarsall.bat по умолчанию? Это станет утомительным, когда мне придется делать это каждый раз, когда я открываю окно Qt cmd. - person Andy; 05.03.2018
comment
@Andy Возможно, это ошибка, из-за которой qmake игнорирует выбранный SDK. Для vcvarsall.bat это не делается по умолчанию, потому что разработчики Qt не могут знать, где вы установили MSVC на свой компьютер и какую версию вы выбрали. Вы можете обойти эту проблему, написав сценарий, который запускает командную строку и устанавливает для вас среды Qt и MSVC. - person Benjamin T; 05.03.2018
comment
@Andy Если вашей целью является разработка приложений Qt в Visual Studio, вы можете использовать инструменты Qt Visual Studio: download.qt.io/official_releases/vsaddin - person Benjamin T; 05.03.2018
comment
Спасибо за помощь! Думаю, теперь я понимаю. - person Andy; 05.03.2018

Сначала прочитайте ответ Бенджамина Т. В этом ответе подробно рассказывается, как его можно настроить с помощью QtCreator

QtCreator позволяет указать аргументы, передаваемые в vcvarsall.bat. Перейдите в Инструменты › Параметры › Наборы › Компиляторы:

  • Клонировать нужный компилятор (ы) с автоматическим обнаружением
  • Укажите нужную версию Windows SDK в последнем поле Инициализация: < img src="https://i.stack.imgur.com/a7dfr.png" alt="введите здесь описание изображения" />
  • Необязательно: обновите имя, чтобы его можно было легко найти на следующем шаге.
  • В разделе Kits › Kits измените компилятор(ы) на вновь созданные (для нужных Kits).
person m7913d    schedule 01.02.2021
comment
Это действительно работает и является правильной процедурой. - person Kuba hasn't forgotten Monica; 06.07.2021