Флаг компилятора Visual C++ для Visual Studio 2013 для нацеливания на XP

Я хочу создать программу на C++ с Visual Studio 2013, предназначенную для среды XP, мне известно о параметре пользовательского интерфейса в свойствах проекта -> вкладка «Конфигурация», чтобы установить инструмент платформы для Windows v120_xp, я хочу добиться этого с помощью команды варианты линии. Как это сделать.

Для визуальной студии 2012 я знаю вариант

установить CL=/D_USING_V110_SDK71_;%CL%

Я ищу аналогичный вариант Visual Studio 2013. Не могли бы вы помочь?


person kiranSchool    schedule 29.04.2014    source источник


Ответы (1)


Макрос _USING_V110_SDK71_ не имеет ничего общего с созданием вашей программы для совместимости с XP, это просто побочный эффект. Важным параметром является параметр компоновщика, /SUBSYSTEM. Обратите внимание, как эта опция позволяет указать основной и дополнительный номер версии подсистемы. Ваша программа может работать только на XP, если вы установите для этой опции значение 5,1. Начиная с VS2012 значение по умолчанию — 6,0, что является номером версии текущего поколения Windows. Для запуска такой программы требуется Vista или выше.

На самом деле это довольно большое дело, понижение номера версии включает некоторые прокладки совместимости приложений в Windows, которые были разработаны для работы с программой, которая объявляет, что ничего не знает о современной версии Windows. В частности, то, как Aero лжет о метриках окон, предназначенных для того, чтобы древняя программа все еще работала с толстыми границами окна.

CRT тоже затронут, довольно неясны детали, связанные с многопоточностью и локализацией. Тестирование конечно нужно. Помните о стоимости поддержки такой древней операционной системы.

И последнее, но не менее важное: вам также необходимо использовать соответствующую версию SDK. Последним, который все еще совместим с XP, является версия 7.1. Если вы строите из командной строки, вы получите 8.1, вам нужно исправить это, сначала установив переменную среды %WindowsSdkDir%. И вам нужно установить целевую версию Windows в ваших заголовках, которые #include Windows.h, надеюсь, предварительно скомпилированный заголовок. Определите _WIN32_WINNT на 0x501, чтобы соответствовать XP и избежать случайного использования функций winapi, недоступных в XP.

person Hans Passant    schedule 29.04.2014
comment
Может показаться, что установка Visual Studio 2013 также устанавливает последнюю версию SDK, в частности 7.1A. Если вам не нужно что-то конкретное из Windows SDK, VS 2013 — это все, что вам нужно. - person John Leidegren; 08.03.2015